博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 调用网易微博开放API
阅读量:4105 次
发布时间:2019-05-25

本文共 4344 字,大约阅读时间需要 14 分钟。

今天尝试了一下使用网易微博的开放平台,在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;	}    }

上图:

转载地址:http://kldsi.baihongyu.com/

你可能感兴趣的文章
Android使用webservice客户端实例
查看>>
层在页面中的定位
查看>>
[转]C语言printf
查看>>
C 语言 学习---获取文本框内容及字符串拼接
查看>>
C 语言学习 --设置文本框内容及进制转换
查看>>
C 语言 学习---判断文本框取得的数是否是整数
查看>>
C 语言 学习---ComboBox相关、简单计算器
查看>>
C 语言 学习---ComboBox相关、简易“假”管理系统
查看>>
C 语言 学习---回调、时间定时更新程序
查看>>
C 语言 学习---复选框及列表框的使用
查看>>
第四章 - 程序计数器
查看>>
第七章 - 本地方法栈
查看>>
第十一章 - 直接内存
查看>>
JDBC核心技术 - 上篇
查看>>
JDBC核心技术 - 下篇
查看>>
一篇搞懂Java反射机制
查看>>
一篇彻底搞懂Java注解与枚举类
查看>>
【2021-MOOC-浙江大学-陈越、何钦铭-数据结构】树
查看>>
【2021-MOOC-浙江大学-陈越、何钦铭-数据结构】树-中
查看>>
【2021-MOOC-浙江大学-陈越、何钦铭-数据结构】线性结构
查看>>