首先,声明,这教程不一定能写完,我是安装自己写程序的进度写教程的。我刚做到这里,后序工作能不能做完,没有信心。
对于申请APP_KEY,APP_SECRET这些过程,就省略了,主要是讲下这些sdk要怎么用。其实,这些SDK的用法,在官网给的教程中,已经很好了。(觉得腾讯在这一点上,比新浪做的好很多。)
我们选择1.2版本的,因为1.2版本中支持oauth2.0认证方式了,比1.0相比,方便简洁的多了。
然后到这个页面,看最基本的搭建腾讯微博开发基础环境的过程:
这个教程中提到的httpmime-4.1.3.jar和Android_SDK_v1.2.jar都是在刚下载的SDK中了,相比新浪,要好很多,至今我还搞不懂新浪的SDK要怎么用呢,教程上写的和实际下载到的SDK命名都是不一样的。
由于,我们开发的是手机客户端,所以,不存在server端的,选择oauth验证方式,我们选择的是ImplicitGrant方式授权。
在完成基础环境搭建的基础上,我们写程序。
先上demo程序的效果图:
非常简单的布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<TextView
android:id="@+id/pane"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world"
tools:context=".MainActivity" />
<Button
android:id="@+id/request"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="请求授权"
/>
<Button
android:id="@+id/show"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="显示"
/>
<Button
android:id="@+id/save"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="保存配置"
/>
</LinearLayout>
源码:
public class MainActivity extends Activity {
private OAuthV2 oAuth;
TextView pane = null;
Button button = null;
Button butshow = null;
Button butsave = null;
String response = null;
String access_key = null;
String openid = null;
String openkey = null;
String expin = null;
String refreshtoken = null;
final String APP_KEY = "写自己应用的app_key";
final String APP_SECRET = "写自己应用的app_secret";
final String FILE = "users";
SharedPreferences shared = null;
SharedPreferences.Editor editor = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.pane = (TextView)this.findViewById(R.id.pane);
this.button = (Button)this.findViewById(R.id.request);
this.butshow = (Button)this.findViewById(R.id.show);
this.butsave = (Button)this.findViewById(R.id.save);
MainActivity.this.shared = MainActivity.this.getSharedPreferences(MainActivity.this.FILE, MODE_PRIVATE);
MainActivity.this.access_key = MainActivity.this.shared.getString("access_key:", "nothing");
MainActivity.this.openid = MainActivity.this.shared.getString("openid", "nothing");
MainActivity.this.openkey = MainActivity.this.shared.getString("openkey:", "nothing");
MainActivity.this.expin = MainActivity.this.shared.getString("expires_in", "nothing");
MainActivity.this.refreshtoken = MainActivity.this.shared.getString("refreshtoken", "nothing");
Log.i("key:", access_key);
this.oAuth = new OAuthV2 ("http://user.qzone.qq.com/915522070/infocenter#!app=216&url=http%3A%2F%2Fz.t.qq.com%2Fmb%2Fqzone%2Findex.html");
this.oAuth.setClientId(this.APP_KEY);
this.oAuth.setClientSecret(this.APP_SECRET);
MainActivity.this.oAuth.setAccessToken(access_key);
MainActivity.this.oAuth.setOpenid(openid);
MainActivity.this.oAuth.setOpenkey(openkey);
MainActivity.this.oAuth.setExpiresIn(expin);
MainActivity.this.oAuth.setRefreshToken(refreshtoken);
this.button.setOnClickListener(new OnClickListener () {
public void onClick(View arg0) {
Intent intent = new Intent (MainActivity.this,
OAuthV2AuthorizeWebView.class);
intent.putExtra("oauth", oAuth);
startActivityForResult(intent, 1); //请设置合适的requsetCode
}
});
this.butshow.setOnClickListener(new OnClickListener () {
public void onClick(View v) {
MainActivity.this.shared = MainActivity.this.getSharedPreferences(MainActivity.this.FILE, MODE_PRIVATE);
MainActivity.this.access_key = MainActivity.this.shared.getString("access_key:", "nothing");
MainActivity.this.openid = MainActivity.this.shared.getString("openid", "nothing");
MainActivity.this.openkey = MainActivity.this.shared.getString("openkey:", "nothing");
MainActivity.this.expin = MainActivity.this.shared.getString("expires_in", "nothing");
MainActivity.this.oAuth.setAccessToken(access_key);
MainActivity.this.oAuth.setOpenid(openid);
MainActivity.this.oAuth.setOpenkey(openkey);
MainActivity.this.oAuth.setExpiresIn(expin);
MainActivity.this.oAuth.setRefreshToken(refreshtoken);
//UserAPI userAPI=new UserAPI(OAuthConstants.OAUTH_VERSION_1);
//若调用2.0 API 以上一行请换为
UserAPI userAPI=new UserAPI(OAuthConstants.OAUTH_VERSION_2_A);
try {
response=userAPI.info(oAuth, "json");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}//获取用户信息
Log.i("info:", response);
Log.i("status:", MainActivity.this.oAuth.getStatus() + "");
for (int i = 0; i < MainActivity.this.oAuth.getCommonParamsList().size(); i++)
Log.i("params:", MainActivity.this.oAuth.getCommonParamsList().get(i).getValue());
/*try {
WeiboParser wp = new WeiboParser (response);
MainActivity.this.pane.setText(wp.getContent() + " 显示");
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}*/
userAPI.shutdownConnection();
}
});
this.butsave.setOnClickListener(new OnClickListener () {
public void onClick(View arg0) {
MainActivity.this.shared = MainActivity.this.getSharedPreferences(MainActivity.this.FILE, MODE_PRIVATE);
MainActivity.this.editor = shared.edit();
editor.putString("access_key:", MainActivity.this.oAuth.getAccessToken());
editor.putString("openid", MainActivity.this.oAuth.getOpenid());
editor.putString("openkey", MainActivity.this.oAuth.getOpenkey());
editor.putString("expires_in", MainActivity.this.oAuth.getExpiresIn());
editor.putString("refreshtoken", MainActivity.this.oAuth.getRefreshToken());
editor.commit();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode==1) { //对应之前设置的的myRequsetCode
if (resultCode==OAuthV2AuthorizeWebView.RESULT_CODE) {
//取得返回的OAuthV2类实例oAuth
oAuth=(OAuthV2) data.getExtras().getSerializable("oauth");
}
}
}
}