Hoy tengo un estudio sobre la API de Sina Weibo, y ahora me he dado cuenta de la función de publicar Weibo, incluido Weibo con imágenes. Para la seguridad, la API de Sina Weibo no proporciona la función de iniciar sesión con una contraseña de cuenta de Weibo, pero utiliza la autorización de OAuth. Los usuarios acceden a los sitios web de SINA a través de los navegadores para iniciar sesión. Después de iniciar sesión con éxito, el navegador devuelve la clave y el secreto del programa.
main.xml:
<? xml versión = "1.0" encoding = "utf-8"?> <lineAleLayout xmlns: android = "http://schemas.android.com/apk/res/android" android: orientación = "vertical" android: lindout_width = "fill_parent" android: lentout_height = "relleno" 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 = "300000000000000 y" Android "Android" /> <Button Android: Layout_width = "Fill_parent" Android: LEING_HEight = "wrap_content" android: id = "@+id /envío" android: text = "publicar" /> < /linealLayout>
Un botón de inicio de sesión, un cuadro de entrada y un botón de publicación porque desea recibir los datos devueltos por el navegador, debe agregar un filtro de intención al registrar una actividad en androidManifest.xml.
<? xml versión = "1.0" encoding = "utf-8"?> <manifest xmlns: android = "http://schemas.android.com/apk/res/android" paquete = "com.phocketdigi.weibo" android: versioncode = "1" android: versión = "1.0"> <usos-sdk andaid /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <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> </Activity> </Application> <use-permission Android: name = "android.permission.internet"> </suse-permission> </mangest>
Intención Filter debe escribirse en dos párrafos. Si se escriben juntos, no se iniciará.
Para simplificar, simplemente copie la clase OAuthconstant en la muestra de Sina:
paquete weibo4android.androidexamples; importe weibo4android.weibo; import weibo4android.http.accesstoken; import weibo4android.http.requestToken; clase pública oauthconstant {private static weibo weibo = null; Instancia privada estática oauthconstant = null; REQUILAR PRIVADO CON LA SELICITUDOKEKE; Private Accesstoken Accesstoken; Token de cadena privada; cadena privada Tokensecret; privado oauthconstant () {}; public static sincronizado oauthconstant getInstance () {if (instance == null) instancia = new OauthConstant (); instancia de retorno; } public weibo getWeibo () {if (weibo == null) weibo = new weibo (); devolver Weibo; } Public 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 setToken (token de cadena) {this.token = token; } public String getTokenSecret () {return tokensecret; } public void satekensecret (string tokensecret) {this.tokensecret = tokensecret; }}El siguiente es el programa principal más crítico:
paquete com.pocketdigi.weibo; import java.io.file; importe weibo4android.weibo; importe weibo4android.weiboException; importe weibo4android.http.accesstoken; importe weibo4android.http.requestToken; importar android.app.activity; importardroid.content.intent; importar android.content.sharedpreferences; importar android.content.sharedpreferences.editor; importardroid.net.uri; importar android.os.bundle; importar android.view.view; import android.view.view.onclicklistener; import android.widget.button; import android.widget.edittext; import android.widget.toast; Public Class Main extiende la actividad { /** llamada cuando la actividad se crea por primera vez. */ String key = "", secret = ""; Botón Iniciar sesión, enviar; Estado de EditText; @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"); // Establezca la clave e inicio de sesión secreto de la aplicación aplicada en la aplicación SINA Open Platform = (Button) FindViewById (R.ID.Login); enviar = (botón) findViewById (r.id.send); status = (EditText) FindViewById (r.id.status); login.setOnClickListener (new onClickListener () {@Override public void onClick (ver v) {// tODO Método generado automático stub login (); // login}}); send.setOnClickListener (new OnClickListener () {@Override public void onClick (Ver v) {// TODO Auto Generated Method Stub Login (); // Login}}); send.setOnClickListener (new onClickListener () {@Override public void onClick (ver v) {// tODO Auto Generated STUB String Text = String.ValueOf (Status.Gettext ()); Weibo = new Weibo (); Weibo.SetToken (Key, Secret); Pruebe {//weibo.updatat). // Enviar solo archivo de texto f = nuevo archivo ("/sdcard/wallpaper/129567208597069400.jpg"); Presionado} Catch (WeiboException e) {// TODO Auto Generated Block E.PrintStackTrace (); } @Override protegido void onStart () {// TODO Método generado automático stub super.onStart (); // Verifique al comenzar, verifique si proviene de la página web para iniciar sesión // Si es así, obtenga la llave y el secreto // lea de lo contrario SharedPreferences // Si no puede obtener la clave y el secreto, salte para iniciar sesión directamente uri = this.getIntent (). GetData (); if (uri! = null) {// Si es un navegador, intente {request Token requestToken = oauthconstant.getInstance () .getRequestToken (); AccessToken AccessToken = requestToken.getAccessToken (uri .getQueryParameter ("OAuth_verifier")); Oauthconstant.getInstance (). SetAccessToken (AccessToken); // Guardar editor Sharedata = getSharedPreferences ("Weibo", 0) .Edit (); Sharedata.putString ("Key", AccessToken.GetToken ()); Sharedata.putString ("Secret", Accesstoken.gettokensecret ()); Sharedata.commit (); Key = AccessToken.GetToken (); Secret = AccessToken.GetTokenSecret (); } catch (WeiboException e) {E.PrintStackTrace (); }} else {// Si el usuario inicia la configuración de SharedPreferences = getSharedPreferences ("weibo", 0); key = settings.getString ("clave", ""); secret = settings.getString ("secreto", ""); } if (key.equals ("") || secret.equals ("")) {toast.maketeext (esto, "aún no ha iniciado sesión", toast.length_long) .show (); acceso(); // omita el registro del navegador}} public void login () {weibo weibo = oauthconstant.getInstance (). GetWeibo (); RequestToken requestToken; Pruebe {requestToken = weibo.getOauthRequestToken ("sina: // weibo"); // Para evitar conflictos con aplicaciones similares, cambie el URI por usted mismo URI URI2 = URI.PARSE (requestToken.getAuthenticationUrl ()+ "& from = xweibo"); Oauthconstant.getInstance (). SetRequestToken (requestToken); startActivity (nueva intención (intent.action_view, uri2)); } catch (WeiboException e) {E.PrintStackTrace (); }}}Debe importar Commons-HttpClient-3.0.1.Jar al enviar imágenes, de lo contrario se informará un error. Por supuesto, Weibo4Android-1.2.0.Jar es indispensable.