Aujourd'hui, j'ai une étude sur l'API de Sina Weibo, et maintenant j'ai réalisé la fonction de publier Weibo, y compris Weibo avec des images. Pour la sécurité, l'API de Sina Weibo ne fournit pas la fonction de connexion avec un mot de passe du compte Weibo, mais utilise l'autorisation OAuth. Les utilisateurs accèdent aux sites Web SINA via les navigateurs pour se connecter. Après avoir connecté avec succès, le navigateur renvoie la clé et le secret du programme.
main.xml:
<? xml version = "1.0" encoding = "utf-8"?> <linearlayout xmlns: android = "http://schemas.android.com/apk/res/android" Android: orientation = "Vertical" Android: Layout_Width = "Fill_parent" Android: Layout_Height = "Fill_parent"> Android: Layout_Width = "Fill_parent" Android: Layout_Height = "Wrap_Content" Android: id = "@ + id / connex <Button Android: Layout_Width = "Fill_parent" Android: Layout_Height = "Wrap_Content" Android: ID = "@ + id / envoyage" Android: Text = "Publish" /> </ linearlayout>
Un bouton de connexion, une boîte d'entrée et un bouton de publication car il souhaite recevoir des données renvoyées par le navigateur, vous devez ajouter un filtre d'intention lors de l'enregistrement d'une activité sur AndroidManifest.xml.
<? xml version = "1.0" Encoding = "utf-8"?> <manifeste xmlns: android = "http://schemas.android.com/apk/res/android" package = "com.pocketdigi.weibo" Android: versioncode = "1" Android: version = "1.0"> <using-sdk androïde: minedkverse = "7"> <uses-dk et minfk <application Android: icon = "@ drawable / icon" Android: label = "@ string / app_name"> <intention-filter> <action Android: name = "android.intent.action.main" /> <catégorie Android: name = "Android.intent. /> <catégorie Android: name = "android.intent.category.default" /> <catégorie Android: name = "android.intent.category.browsable" /> <data Android: schéma = "SINA" Android: host = "weibo" /> <! - Adresse de surveillance comme sina: // weibo--> </ntent-filter> Android: name = "android.permission.internet"> </ use-permission> </ manifest>
Le filtre de l'intention doit être écrit en deux paragraphes. S'il est écrit ensemble, il ne sera pas démarré.
Pour plus de simplicité, copiez simplement la classe OAuthConstant dans SINA Exemple:
Package Weibo4Android.Androidex échantillons; import weibo4android.weibo; import weibo4android.http.accesstoken; import weibo4android.http.requestToken; classe publique oAuthConstant {private static Weibo Weibo = null; instance oAuthConstant privée statique = null; demande de demande privée; AccessToken Private AccessToken; jeton de chaîne privé; TOKENSECRET PRIVÉE; privé oAuthConstant () {}; public static synchronisé oAuthConstant getInstance () {if (instance == null) instance = new oAuthConstant (); retour d'instance; } public Weibo getweibo () {if (weibo == null) weibo = new Weibo (); Retour Weibo; } public AccessToken GetAccessToken () {return AccessToken; } public void setAccessToken (AccessToken AccessToken) {this.accesstoken = accessToken; this.token = accessToken.getToken (); this.tokensecret = accessToken.getTokenSeret (); } public requestToken getRequestToken () {return requestToken; } public void setRequestToken (requestToken requestToken) {this.requestToken = requestToken; } public String getToken () {return token; } public void Setthen (token de chaîne) {this.token = token; } public String getToKenSeCret () {return tokenseCret; } public void SettokenSeCret (String tokenseCret) {this.tokensecret = tokenseCret; }}Vient ensuite le programme principal le plus critique:
package com.pocketdigi.weibo; Importer java.io.file; importer weibo4android.weibo; import weibo4android.weiboException; importer weibo4android.http.accesstoken; Importer Weibo4Android.http.RequestToken; import Android.App.activité; import android.content.intent; import android.content.sharedpreferences; import android.content.sharedpreferences.editor; import Android.net.uri; import android.os.bundle; import android.view.view; import android.view.view.onclickListener; import android.widget.button; import android.widget.editText; import android.widget.toast; La classe publique principale étend l'activité {/ ** appelée lorsque l'activité est créée pour la première fois. * / String key = "", secret = ""; Connexion du bouton, envoyer; EditText Status; @Override public void onCreate (bundle SavedInStanceState) {super.onCreate (SavedInstancEstate); setContentView (R.Layout.Main); System.SetProperty ("Weibo4j.oauth.ConsumerKey", "3997936609"); System.SetProperty ("Weibo4j.oauth.ConsumersECret", "8BC9E3BFD6AE8E3B2B8BDA9079918950"); // Définissez la clé de connexion et la connexion secrète de l'application appliquée sur la plate-forme ouverte de l'application SINA = (bouton) findViewByid (r.id.login); send = (bouton) findViewByid (r.id.send); status = (editText) findViewByid (r.id.status); Login.SetOnClickListener (new onClickListener () {@Override public void onClick (View v) {// TODO Méthode générée automatique Stub Login (); // Login}}); send.setOnClickListener (new onClickListener () {@Override public void onClick (View v) {// TODO Méthode générée automatique Stub Login (); // Login}}); send.setOnclickListener (new onclickListener () {@Override public void onclick (voir v) {// TODO Méthode générée auto-ade F = nouveau fichier ("/ sdcard / fond d'écran / 129567208597069400.jpg"); (WeiboException e) {// TODO Bloc de capture généré automatiquement E.PrintStackTrace ();}}}); } @Override Protected void onStart () {// TODO Méthode générée automatique Stub super.onstart (); // Vérifiez au démarrage, vérifiez si cela provient de la page Web pour vous connecter // Si oui, obtenez KEY et Secret // Sinon, lisez SharedPreferences // Si vous ne pouvez pas obtenir la clé et le secret, sautez pour vous connecter directement uri uri = this.getIntent (). GetData (); if (uri! = null) {// S'il s'agit d'un navigateur, essayez {requestTokenTokenToken = oAuthConstant.getInstance () .getRequestToken (); AccessToken AccessToken = requestToken.getAccessToken (uri .getQueryParameter ("oauth_verifier")); OAuthConstant.getInstance (). SetAccessToken (AccessToken); // Enregistrer l'éditeur SharedAta = getSharedPreferences ("Weibo", 0) .Edit (); SharedAta.PutString ("Key", AccessToken.getToken ()); sharedata.putString ("secret", AccessToken.getTokenSeret ()); sharedAta.Commit (); key = accessToken.getToken (); Secret = AccessToken.getTokenSeret (); } catch (WeiBoException e) {e.printStackTrace (); }} else {// Si l'utilisateur démarre des paramètres partagés de partage de références = getSharedPreferences ("Weibo", 0); key = settings.getString ("key", ""); Secret = Settings.getString ("Secret", ""); } if (key.equals ("") || secret.equals ("")) {toast.makeText (this, "non connecté encore", toast.length_long) .show (); se connecter(); // Passez à la connexion du navigateur}} public void Login () {Weibo Weibo = oAuthConstant.getInstance (). GetWeibo (); RequestToken requestToken; essayez {requestToken = weibo.getoAuthRequestToken ("sina: // weibo"); // Afin d'éviter les conflits avec des applications similaires, veuillez changer l'uri par vous-même uri uri2 = uri.parse (requestToken.getAuthenticationUrl () + "& from = xweibo"); OAuthConstant.getInstance (). SetRequestToken (requestToken); startActivity (nouvelle intention (intention.action_view, uri2)); } catch (WeiBoException e) {e.printStackTrace (); }}}Vous devez importer Commons-HttpClient-3.0.1.jar lors de l'envoi d'images, sinon une erreur sera signalée. Bien sûr, Weibo4android-1.2.0.jar est indispensable.