Android 调用网易微博开放API

今天尝试了一下使用网易微博的开放平台,在Android上开发应用。把用于Java的SDK下回来之后,用起来还有一些问题。不过后来都解决了。
下面把整个过程记录在些,给有需要的朋友。

1、到http://open.t.163.com/wiki/index.php?title=Sdk#Java把SDK下载回来。  我们注意到,SDK包里是源代码。

2、到http://open.t.163.com/apps/new 新建一个应用,以得到咱这个应用的consumerKey和consumerSecret。

3、用Eclipse新建一个Android工程。注意Android版本要选2.X的。把第一步下回来的SDK中src文件夹下的内容放到Android工程的src目录下。

4、配置buildPath,将SDK中lib下的jar包添加到Android工程中。(如何配置buildPath就不详说了吧)

5、完成这些以后,HttpClient类中还是报错,找不到javax.activation.MimetypesFileTypeMap这个。这时,到http://www.jar114.com/ 这个网站去搜索一下javax.activation.MimetypesFileTypeMap是在哪个包里的,然后把包下载回来,再配置buildPath,把下回来的包也添加到工程中,这时就不再报错了。

6、SDK中,程序的入口是example包中的OAuthGetToken类,但咱现在是Android应用,入口在Activity里,所以咱把OAuthGetToken类中Main方法的方法体都拷到咱Android工程里的自己的Activity的OnCreate方法里。

7、上一步拷贝的代码中,咱要把
System.setProperty("tblog4j.oauth.consumerKey", "");
     System.setProperty("tblog4j.oauth.consumerSecret", "");
  这里设上第二步获取到的consumerKey和consumerSecret。

8、在AndroidManifest文件中添加访问互联网的权限设置。
<uses-permission android:name="android.permission.INTERNET"></uses-permission>

9、看起来差不多了吧,运行一下一堆的错误。我找了下原因,发现程序里面用到了Property文件,现在这个文件在src文件夹下,但在Android里,Property文件放在这里它是读不到的。所以把src下的t4j.properties文件放到assets里。这时我们访问的路径也要改。

10、找到t4j包下的Configuration类的81行。

   将loadProperties(defaultProperty, Configuration.class.getResourceAsStream("/" + t4jProps));

改成loadProperties(defaultProperty,Configuration.class.getResourceAsStream("/assets/" + t4jProps));

11、这个时候,我们来把调用方法的流程理一理。

第一步,生成一个验证我们应用的URL,容易想到,这个URL里携带了应用的标识信息

第二步,调用浏览器访问这个URL,在页面中,用户设置允许我们的应用访问他的账号。设置以后,163保存了这种允许的状态。

第三步,设置完成后,用户退出浏览器,回到我们的应用,我们的应用再通过调用SDK去163那里获得AccessToken。

第四步,使用AccessToken,我们就可以调用SDK中的任意方法了,譬如验证用户,获取微博列表等。

下面我完成的这个例子的效果是,一进到应用,点击按钮去验证,验证完后,用户退出浏览器,应用显示用户的微博用户名。

上代码:

import t4j.TBlog;
import t4j.TBlogException;
import t4j.data.User;
import t4j.http.AccessToken;
import t4j.http.RequestToken;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class Welcome extends Activity implements OnClickListener{
	private String verifyURL;
	private TextView tvTip;
	private TextView tvUserName;
	private TBlog tblog;
	private RequestToken requestToken;
	// 标志是否已验证
	private int flag = 0;
	
    @Override
	public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        tvTip = (TextView) findViewById(R.id.tv_tip);
        tvUserName = (TextView) findViewById(R.id.tv_username);        
        Button btnVerify = (Button)findViewById(R.id.btn_verify);
        btnVerify.setOnClickListener(this);
        // 设置应用信息
        System.setProperty("tblog4j.oauth.consumerKey", "kKyj0SlCsEo1JSUk");
        System.setProperty("tblog4j.oauth.consumerSecret", "ISjF44L9ftKzhdRsLsPI4KK22YdfB55e");
        // 关掉debug,减少干扰信息
    	System.setProperty("tblog4j.debug", "false");
    	tvTip.setText("点击按钮去163验证应用");
    	tblog = new TBlog();
		// 获取RequestToken
        try {
			requestToken = tblog.getOAuthRequestToken();
		} catch (TBlogException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		
		// 获取验证URL
		verifyURL = requestToken.getAuthenticationURL();
	}
    
    // 当用记关闭浏览器回到应用时,onResume会被执行。
    // 由于onResume是常常会被执行的方法,所以设置flag标志位,保证只在验证回来时运行获取accessTocken
    protected void onResume(){
    	super.onResume();
    	if(flag == 1){
    		tvTip.setText("验证完毕,显示用户名");
	    	AccessToken accessTocken = null;
			try {
				accessTocken = tblog.getOAuthAccessToken(requestToken);
			} catch (TBlogException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}      
            
			// 可以将accessTocken保存起来,以后就不用再次获取了。
			tblog.setToken(accessTocken.getToken(), accessTocken.getTokenSecret());
			
			// 获取微博用户信息
			User user = null;
			try {
				user = tblog.verifyCredentials();
			} catch (TBlogException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			tvUserName.setText(user.getName());
			flag = 2;
    	}
    }

	@Override
	public void onClick(View arg0) {    
		
		// 调用浏览器打开URL
		Intent intent = new Intent();
		intent.setAction("android.intent.action.VIEW");
		Uri content_uri_browsers = Uri.parse(verifyURL);
		intent.setData(content_uri_browsers);
		intent.setClassName("com.android.browser","com.android.browser.BrowserActivity");
		startActivity(intent);	
		flag = 1;
	}    
}

上图:






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值