Сегодня у меня есть исследование по API Sina Weibo, и теперь я понял функцию публикации Weibo, включая Weibo с картинками. Для безопасности API Sina Weibo не предоставляет функцию входа в систему с паролем учетной записи Weibo, но использует авторизацию OAuth. Пользователи получают доступ к веб -сайтам SINA через браузеры для входа в систему. После успешного входа в систему браузер возвращает ключ и секрет программы.
main.xml:
<? xml version = "1.0" Encoding = "UTF-8"?> <linearlayout xmlns: android = "http://schemas.android.com/apk/res/android" Android: Orientation = "vertical" Android: Mayout_width = "fill_parent": layout_heuet 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 = "300 -й соз. /> <Кнопка Android: Mayout_Width = "fill_parent" Android: Layout_height = "wrap_content" Android: id = "@+id /send" Android: Text = "Oppish" /> < /linearlayout>
Кнопка входа в систему, окно ввода и кнопка публикации, поскольку она хочет получить данные, возвращаемые браузером, вам необходимо добавить фильтр намерения при регистрации действия на 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" android:versionName="1.0"> <uses-sdk android:minSdkVersion="7" /> <Application Android: icon = "@Draitable /Icon" Android: label = "@string /app_name"> <intert-filter> <action android: name = "android.intent.action.main" /> <Категория Android: "Android.intent.categor Android: name = "android.intent.action.view" /> <категория Android: name = "android.intent.category.default" /> <категория Android: name = "android.intent.category.browable" /> <Data Android: Shipe = "sina" Android: host = "weibo" /> <!-Мониторинг. </activity> </application> <using-permission android: name = "android.permission.internet"> </users-permission> </manifest>
Фильтр намерения должен быть написан в двух абзацах. Если написано вместе, это не будет начато.
Для простоты просто скопируйте класс Oauthconstant в образце Sina:
пакет weibo4android.androidexamples; Импорт weibo4android.weibo; импорт weibo4android.http.accesstoken; импорт weibo4android.http.requesttoken; открытый класс oauthconstant {private static weibo weibo = null; Частный статический экземпляр oauthconstant = null; Частный запрос requestToken; Private AccessToken AccessToken; частный токен строки; частная строка Tokensecret; private OauthConstant () {}; public static synchronized oauthconstant getInstance () {if (exant == null) encement = new OauthConstant (); вернуть экземпляр; } public weibo getWeibo () {if (weibo == null) weibo = new 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 Setteken (String Token) {this.token = token; } public String getTokenSecret () {return tokensecret; } public void SetTokenSecret (String tokenSecret) {this.tokensecret = tokensecret; }}Далее является наиболее важной основной программой:
пакет com.pocketDigi.weibo; Импорт java.io.file; Импорт weibo4android.weibo; Импорт weibo4Android.WeiboException; Импорт weibo4android.http.accesstoken; Импорт weibo4android.http.requesttoken; Импорт Android.App.Activity; Импорт Android.content.Intent; Import Android.content.SharedPreferences; Import Android.content.sharedPreferences.editor; Импорт Android.net.uri; Импорт Android.os.bundle; Import Android.View.View; Import Android.view.view.onclickListener; Import Android.widget.button; Import Android.widget.editText; Import Android.widget.toast; Общедоступный класс «Основное расширение деятельности» { /** называется, когда деятельность сначала создана. */ String key = "", secret = ""; Кнопка входит в систему, отправить; Статус 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"); // Установить ключ и секретный вход приложения, применяемый на открытой платформе SINA, (кнопка) FindViewByID (R.Id.Login); send = (кнопка) findviewbyid (r.id.send); status = (edittext) findViewById (r.id.status); login.setonclicklistener (new onclicklistener () {@override public void onclick (view v) {// todo автоматически генерируемый метод stub login (); // login}}); send.setonclicklistener (new onclicklistener () {@override public void onclick (view v) {// todo автоматически генерируемый метод stub login (); // login}}); send.setonclicklistener (new onclicklistener () {@override public void onclick (view v) {// todo автоматически сгенерированный метод string text = string.valueof (status.gettext ()); weibo weibo = new weibo (); weibo.settoken (key, secret); try {//webo.up. f = новый файл ("/sdcard/обои/129567208597069400.jpg"); (Weiboexception e) {// todo автоматически сгенерированный блок e.printstacktrace (); } @Override Protected void OnStart () {// TODO Автогенерированный метод Supub Super.onStart (); // Проверьте при запуске, проверьте, поступает ли она с веб -страницы, чтобы войти в систему // Если да, получите ключ и секрет // в противном случае прочитайте SharedPreferences // Если вы не можете получить ключ и секрет, перейдите, чтобы войти в систему непосредственно uri uri = this.getintent (). GetData (); if (uri! = null) {// Если это браузер, попробуйте {requestToken requestToken = oauthConstant.getInstance () .getRequestToken (); AccessToken accessToken = requestToken.getAccessToken (uri .getQueryParameter ("OAuth_Verifier")); Oauthconstant.getInstance (). SetAccessToken (AccessToken); // Сохранить редактор 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 {// Если пользователь начинает sharedpreferences settings = getsharedpreferences ("weibo", 0); key = stens.getString ("key", ""); secret = settings.getString ("secret", ""); } if (key.equals ("") || secret.equals ("")) {toast.makeText (это, "еще не вошел в систему", toast.length_long) .show (); авторизоваться(); // пропустить в браузер}}} public void Login () {weibo weibo = oauthconstant.getInstance (). GetWeibo (); RequestToken requestToken; try {requestToken = weibo.getoAuthrequesttoken ("sina: // weibo"); // Чтобы избежать конфликтов с аналогичными приложениями, пожалуйста, измените URI самостоятельно uri uri2 = uri.parse (requestToken.getAuthenticationUrl ()+ "& from = xweibo"); Oauthconstant.getInstance (). SetRequestToken (requestToken); startActivity (новое намерение (intent.action_view, uri2)); } catch (weiboexception e) {e.printstacktrace (); }}}Вам необходимо импортировать Commons-httpclient-3.0.1.jar При отправке изображений, в противном случае сообщается об ошибке. Конечно, Weibo4Android-1.2.0.jar необходим.