Heute habe ich eine Studie über Sina Weibo's API und jetzt habe ich die Funktion des Veröffentlichens von Weibo, einschließlich Weibo mit Bildern, erkannt. Für die Sicherheit bietet die API von Sina Weibo nicht die Funktion der Anmeldung mit einem Weibo -Konto -Passwort, sondern verwendet die OAuth -Autorisierung. Benutzer greifen über Browser auf Sina -Websites zu, um sich anzumelden. Nach erfolgreicher Anmeldung gibt der Browser den Schlüssel und das Geheimnis des Programms zurück.
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"> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/login" android:text="login" /> <EditText android:id="@+id/status" android:layout_width="fill_parent" android:layout_height="300sp" android:hint="enter Weibo -Nachricht " /> <Button Android: layout_width =" fill_parent "Android: layout_Height =" Wrap_Content "Android: id ="@+id /send "Android: text =" Publish " /> < /linearLayout>
Eine Login-Schaltfläche, ein Eingabefeld und eine Veröffentlichungsschaltfläche, da sie vom Browser zurückgegebene Daten empfangen werden möchten, müssen Sie bei der Registrierung einer Aktivität auf AndroidManifest.xml einen Intent-Filter hinzufügen.
<? Android: minsdkversion = "7" /> <application Android: icon = "@Drawable /icon" Android: Label = "@String /App_Name"> <Intent-filter> <action Android: name = "android.intent.action.Action.main" /> <category android: name = "android fing.tent.intent.category.launer" /> <Name = "und intent.intent.cather. <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="sina" android:host="weibo" /> <!-- Monitoring address like SINA: // Weibo--> </intent-filter> </acity> </application> <usad-permission android: name = "android.permission.internet"> </usad-Permission> </manifest>
Intent-Filter muss in zwei Absätzen geschrieben sein. Wenn es zusammen geschrieben wird, wird es nicht gestartet.
Kopieren Sie einfach die OAuthConstant -Klasse in Sina -Probe:
Paket Weibo4android.Androidexamples; Import Weibo4android.Weibo; Import Weibo4android.http.accessToken; Import Weibo4android.http.RequestToken; public class oAuthConstant {private static wibo wibo = null; private statische oauthConstant Instance = NULL; private anforderte requestToken; private AccessToken AccessToken; privates String -Token; private String Tokenecret; private oAuthConstant () {}; public static synchronisierte OAuthConstant getInstance () {if (instance == null) instance = new OAuthConstant (); Rückkehrinstanz; } public wibo getWeibo () {if (wibo == null) wibo = new wibo (); Return Weibo; } öffentlicher AccessToken getAccessToken () {return accessToken; } public void setAccessToken (AccessToken AccessToken) {this.accessToken = AccessToken; this.token = AccessToken.GetToken (); this.tokenSecret = AccessToken.gettokenSecret (); } public requestToken getRequestToken () {return requestToken; } public void setRequestToken (RequestToken RequestToken) {this.RequestToken = RequestToken; } public String GetToken () {return token; } public void setzte (String token) {this.token = token; } public String getTokenSecret () {return tokenecret; } public void setzokenecret (String tokenecret) {this.tokenSecret = tokenecret; }}Als nächstes kommt das kritischste Hauptprogramm:
Paket com.pocketdigi.weibo; Import Java.io.file; Import Weibo4android.Weibo; Import Weibo4android.WeiboException; Import Weibo4android.http.accessToken; Import Weibo4android.http.RequestToken; importieren android.app.Activity; import android.content.intent; importieren android.content.sharedPreferences; import android.content.sharedPreferences.Editors; importieren Android.net.uri; importieren Android.os.bundle; android.view.view; importieren Sie Android.view.view.onclickListener; importieren Sie Android.widget.button; importieren Sie Android.widget.edittext; importieren Sie Android.widget.toast; Die öffentliche Klasse Main erweitert Aktivität { /** genannt, wenn die Aktivität zum ersten Mal erstellt wird. */ String key = "", secry = ""; Taste Anmeldung, senden; EditText Status; @Override public void OnCreate (Bündel savedInstancestate) {Super.oncreate (SavedInstancestate); setContentView (r.layout.main); System.SetProperty ("Weibo4j.OAUTH.CONSUMERKEY", "3997936609"); System.setProperty ("Weibo4j.oauth.consumerSecret", "8BC9E3BFD6AE8E3B2B8BDA9079918950"); // Legen Sie den Schlüssel und die geheime Anmeldung der Anwendung fest, die auf der SINA -Anwendung Open Platform = (Button) findViewById (R.Id.login) angewendet wird. send = (button) findViewById (r.id.send); status = (editText) findViewById (R.Id.Status); login.setonClickListener (neuer OnclickListener () {@Override public void Onclick (Ansicht v) {// Todo automatisch generierte Methode stub login (); // login}}); send.setonclickListener (neuer OnclickListener () {@Override public void onclick (Ansicht v) {// Todo auto-generierter Methode stub login (); // Login}}); send.setonClickListener (neuer OnclickListener () {@Override public void onclick (View v) {// Todo automatisch generierter Methode Stub String text = string.valueof (status.getText ()); WeiboiboiboiBo.settoken (Schlüssel); // Nur Textdatei f = neue Datei ("/sdcard/wallpaper/129567208597069400.jpg"); gedrückt} catch (Weiboxception e) {// Todo automatisch erzeugte Fangblock E. printstacktrace ();}}}); } @Override protected void onStart () {// Todo automatisch generierte Methode Stub Super.onstart (); // Überprüfen Sie beim Starten, ob es auf der Webseite kommt, um sich in // anzumelden. Wenn ja, erhalten Sie Schlüssel und Geheimnis // Ansonsten lesen Sie SharedPreferences // Wenn Sie nicht Schlüssel und Geheimnis erhalten können, wenden Sie sich an direkt Uri = this.getIntent (). GetData (). if (uri! AccessToken AccessToken = RequestToken.getAccessToken (uri .getQueryparameter ("oAuth_verifier")); Oauthconstant.getInstance (). SetAccessToken (AccessToken); // Save Editor Sharedata = getSharedPreferences ("Weibo", 0) .Edit (); Sharedata.putstring ("Key", AccessToken.GetToken ()); Sharedata.putstring ("Secret", AccessToken.gettokeneScret ()); Sharedata.Commit (); Key = AccessToken.GetToken (); Secret = AccessToken.gettokenecret (); } catch (wiboxception e) {e.printstacktrace (); }} else {// Wenn der Benutzer SharedPreferences -Einstellungen = getSharedPreferences ("Weibo", 0) startet; Key = Settings.getString ("Key", ""); Secret = Settings.getString ("Geheimnis", ""); } if (key.equals ("") || secret.equals ("") {toast.makeText (this, "nicht angemeldet", toast.length_long) .show (); Login(); // zum Browser Login}} public void login () {wibo wibo = oauthconstant.getInstance (). GetWeibo (); RequestToken RequestToken; try {requestToken = wibo.getoAuthequestToken ("Sina: // Weibo"); // Um Konflikte mit ähnlichen Anwendungen zu vermeiden, ändern Sie bitte die URI selbst Uri2 = Uri.Parse (RequestToken.getAuthenticationUrl ()+ "& von = xweibo"); Oauthconstant.getInstance (). SetRequestToken (requestToken); StartActivity (neue Absicht (Intent.Action_View, URI2)); } catch (wiboxception e) {e.printstacktrace (); }}}Sie müssen Commons-httpclient-3.0.1.jar beim Senden von Bildern importieren, andernfalls wird ein Fehler gemeldet. Natürlich ist Weibo4android-1.2.0.jar unverzichtbar.