时间:2021-05-20
今天下了个新浪微博的API研究研究,目前实现了发布微博功能,包括带图片的微博。为了安全,新浪微博的API中并没有提供用微博帐号密码登录的功能,而是采用OAuth授权,用户通过浏览器访问新浪网站登录,登录成功后,浏览器再返回key和secret给程序。
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="登录" /> <EditText android:id="@+id/status" android:layout_width="fill_parent" android:layout_height="300sp" android:hint="输入微博消息" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/send" android:text="发布" /></LinearLayout>一个登录按钮,一个输入框,一个发布按钮
因为要接收浏览器返回的数据,所以,AndroidManifest.xml注册Activity的时候要加个Intent-Filter
intent-filter必须分成两段写,如果合在一起写,就启动不了了。
为了简便,直接把新浪Sample里的OAuthConstant类拷过来:
接下来就是最关键的主程序:
package com.pocketdigi.weibo; import java.io.File; import weibo4android.Weibo;import weibo4android.WeiboException;import weibo4android.http.AccessToken;import weibo4android.http.RequestToken;import android.app.Activity;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; public class Main extends Activity { /** Called when the activity is first created. */ String key = "", secret = ""; Button login,send; 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"); //设置在新浪应用开放平台申请的应用的key和secret login=(Button)findViewById(R.id.login); send=(Button)findViewById(R.id.send); status=(EditText)findViewById(R.id.status); login.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { // TODO Auto-generated method stub login(); //登录 }}); send.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { // TODO Auto-generated method stub String text=String.valueOf(status.getText()); Weibo weibo = new Weibo(); weibo.setToken(key,secret); try { //weibo.updateStatus(text); //只发文字 File f=new File("/sdcard/wallpaper/129567208597069400.jpg"); weibo.uploadStatus(text,f ); //发文字+图片,这里需要导入commons-httpclient-3.0.1.jar,自己网上下 //在实际项目上,最好放Thread里,因为按下去的时候按钮会卡 } catch (WeiboException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}); } @Override protected void onStart() { // TODO Auto-generated method stub super.onStart(); //启动时执行检测是否来自网页登录返回 //如果是,获取key和secret //否则读取SharedPreferences //若得不到key和secret,直接跳转登录 Uri uri = this.getIntent().getData(); if (uri != null) { //如果是浏览器返回 try { RequestToken requestToken = OAuthConstant.getInstance() .getRequestToken(); AccessToken accessToken = requestToken.getAccessToken(uri .getQueryParameter("oauth_verifier")); OAuthConstant.getInstance().setAccessToken(accessToken); // 保存 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 { //如果是用户自己启动 SharedPreferences settings = getSharedPreferences("WeiBo", 0); key = settings.getString("key", ""); secret = settings.getString("secret", ""); } if (key.equals("") || secret.equals("")) { Toast.makeText(this, "尚未登录", Toast.LENGTH_LONG).show(); login(); //跳转到浏览器登录 } } 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(new Intent(Intent.ACTION_VIEW, uri2)); } catch (WeiboException e) { e.printStackTrace(); } }}发图片需要导入commons-httpclient-3.0.1.jar,否则启动报错,当然weibo4android-1.2.0.jar是不可少的
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
以新浪微博为例,找回微博账号的方法是: 1、首先打开浏览器,输入新浪微博,进入新浪微博; 2、进入之后出现登录界面,单击忘记密码,进入找回账号密码; 3、
7月12日消息,新浪微博昨晚起发生账号错乱,用户反映别人正在使用自己的账号发微博,同时也有用户反映自己登陆微博之后竟然是别人的账号。昨晚,雷锋网官方微博出现恶意
新浪微博修改认证信息方法登陆新浪微博首页将账号和密码输入进入。登陆到后台过后,就点击右上角的设置图标,它立即会下拉一个下拉框出来,然后点击“V认证&
我们使用电脑关微博、论坛等一些网站的时候都需要登陆账号密码才可以更好的使用,不过每次登录都需要输入账号密码确实比较麻烦,其实很多浏览器都提供了自动保存账号密
新浪微博是一款新浪官方出品的手机客户端微博软件,那当大家已经注册拥有了新浪账号却登陆不上怎么办呢?小编为大家提供解决方法吧!新浪微博登陆的时候,总是提示要输入验