Hari ini saya memiliki studi tentang API Sina Weibo, dan sekarang saya telah menyadari fungsi penerbitan Weibo, termasuk Weibo dengan gambar. Untuk keamanan, API Sina Weibo tidak menyediakan fungsi masuk dengan kata sandi akun Weibo, tetapi menggunakan otorisasi OAuth. Pengguna mengakses situs web SINA melalui browser untuk masuk. Setelah masuk dengan sukses, browser mengembalikan kunci dan rahasia ke program.
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" layout_width = "fill_parent" tata letak "@+@+" hip = layout_width = "fill_parent" android: layout = layout = layout = layout = layout_width = "fill_parent"@+layout = " /> <Tombol android: layout_width = "fill_parent" android: layout_height = "wrap_content" android: id = "@+id /send" android: text = "publish" /> < /linearlayout>
Tombol login, kotak input, dan tombol publikasi karena ingin menerima data yang dikembalikan oleh browser, Anda perlu menambahkan niat-filter saat mendaftarkan aktivitas di androidmanifest.xml.
<? Xml Version = "1.0" encoding = "UTF-8"?> <Manifest xmlns: android = "http://schemas.android.com/apk/res/android" package = "com.pocketdigi.weibo" android: versioncode = "1" dan: versionname = "version =" version = "sore "-droid "-droid: version =" 1 "dan: versionname =" version = "version =" Version = "Version =" Version = "Version =" Version = "1" /> <application android: icon = "@@drawable /icon" android: label = "@string /app_name"> <Itent-filter> <action android: name = "android.intent.action.main" /> <kategori android: name = "android.intent.category.launcher" / /< /name-filter> <itent.category. Android: name = "android.intent.action.view" /> <kategori android: name = "android.intent.category.default" /> <kategori android: name = "android.intent.category.browsable" /> <Data android: scheme = "sina" android: host = "weibo" /<! </active> </splication> <use-persmission android: name = "android.permission.internet"> </use-persmission> </manifest>
Intent-filter harus ditulis dalam dua paragraf. Jika ditulis bersama, itu tidak akan dimulai.
Untuk kesederhanaan, cukup salin kelas oAuthconstant dalam sampel SINA:
paket weibo4android.androidexamples; impor weibo4android.weibo; import weibo4android.http.accesstoken; import weibo4android.http.requesttoken; kelas publik oAuthconstant {private static weibo weibo = null; instance oAuthconstant private static = null; permintaan pribadi requesttoken; AccessTokenToken Private AccessToken; token string pribadi; Tokensecret string pribadi; private oAuthConstant () {}; public static static oAuthConstant getInstance () {if (instance == null) instance = oAuthConstant baru (); instance return; } public weibo getWeibo () {if (weibo == null) weibo = weibo baru (); Kembalikan 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 (string token) {this.token = token; } public string gettokensecret () {return tokensecret; } public void Settokensecret (String Tokensecret) {this.tokensecret = Tokensecret; }}Berikutnya adalah program utama yang paling kritis:
paket com.pocketdigi.weibo; impor java.io.file; impor weibo4android.weibo; impor weibo4android.weiboException; impor weibo4android.http.accesstoken; impor weibo4android.http.requesttoken; impor android.app.activity; impor android.content.intent; impor android.content.sharedpreferences; impor android.content.sharedpreferences.Editor; impor android.net.uri; impor android.os.bundle; import android.view.view; import android.view.view.onClickListener; import android.widget.button; import android.widget.editText; import android.widget.toast; Kelas Publik Utama memperluas aktivitas { /** dipanggil saat aktivitas pertama kali dibuat. */ String key = "", Secret = ""; Login tombol, Kirim; Status 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"); // Atur login kunci dan rahasia dari aplikasi yang diterapkan pada aplikasi SINA Open Platform = (tombol) findViewById (r.id.login); kirim = (tombol) findViewById (r.id.send); status = (editText) findViewById (r.id.status); Login.setOnClickListener (OnClickListener baru () {@Override public void onClick (view v) {// TODO Metode yang dihasilkan secara otomatis stub stubin (); // login}}); send.setOnClickListener (OnClickListener baru () {@Override public void onClick (view v) {// todo Metode yang dihasilkan otomatis stub stubin (); // login}}); send.setOnClickListener (OnClickListener baru () {@Override public void OnClick (view v) {// TODO Metode yang dihasilkan otomatis Teks string = string.valueof (status.getText (); weibo weibo = new weibo (); weibo.setteks (Key, secret File Teks = File Baru ("/SDCard/Wallpaper/129567208597069400.jpg")); (WeiboException E) {// TODO Auto-Eynerated Catch Block E.PrintStackTrace (); } @Override Protected void onStart () {// TODO Metode yang dihasilkan otomatis Stub super.onstart (); // Periksa saat memulai, periksa apakah itu berasal dari halaman web untuk masuk // jika ya, dapatkan kunci dan rahasia // sebaliknya baca sharedpreferences // jika Anda tidak bisa mendapatkan kunci dan rahasia, lompat untuk masuk langsung ke uri = this.getIntent (). GetData (); if (uri! = null) {// jika itu adalah browser, coba {requestTokenenToken = oAuthConstant.getInstance () .getRequestToken (); AccessToken AccessToken = requestToken.getAccessToken (URI .getQueryParameter ("oauth_verifier")); Oauthconstant.getInstance (). SetAccessToken (AccessToken); // Simpan editor sharedata = getSharedPreferences ("weibo", 0) .edit (); sharedata.putString ("Key", AccessToken.getToken ()); sharedata.putString ("rahasia", accessToken.gettokensecret ()); sharedata.commit (); key = accessToken.getToken (); Secret = AccessToken.gettokensecret (); } catch (weiboException e) {e.printstacktrace (); }} else {// Jika pengguna memulai pengaturan sharedpreferences = getSharedPreferences ("weibo", 0); key = settings.getString ("key", ""); Secret = settings.getString ("Secret", ""); } if (key.equals ("") || secret.equals ("")) {toast.maketext (ini, "tidak masuk lagi", toast.length_long) .show (); login(); // Lewati ke browser login}} public void login () {weibo weibo = oauthconstant.getInstance (). GetWeibo (); RequestToken requestToken; coba {requestToken = weibo.getoAuthRequestToken ("Sina: // weibo"); // Untuk menghindari konflik dengan aplikasi yang sama, harap ubah URI sendiri URI URI2 = uri.parse (requestToken.getAuthenticationUrl ()+ "& from = xweibo"); Oauthconstant.getInstance (). SetRequestToken (requestToken); startActivity (niat baru (intent.action_view, uri2)); } catch (weiboException e) {e.printstacktrace (); }}}Anda perlu mengimpor commons-httpclient-3.0.1.jar saat mengirim gambar, jika tidak kesalahan akan dilaporkan. Tentu saja, weibo4android-1.2.0.jar sangat diperlukan.