这里要说一下,我用的jar包并不是最新版的SDK,因为我测试过最新的这个“weiboSDK2.1_130712.jar”,在授权的时候会出现NumberFormatException的错误,我也不知道是为什么,所以我换了前面的一个版本:
weibo.sdk.android.sso.jar,就可以正确地获取access_token和expires_in,童鞋们可以自己去试一下。
下面是项目代码:
1.首先增加权限
2. /OauthTest/src/com/weibo/sdk/android/demo/MainActivity.java
package com.weibo.sdk.android.demo;
import java.text.SimpleDateFormat;
import java.util.Date;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import com.weibo.sdk.android.Oauth2AccessToken;
import com.weibo.sdk.android.Weibo;
import com.weibo.sdk.android.WeiboAuthListener;
import com.weibo.sdk.android.WeiboDialogError;
import com.weibo.sdk.android.WeiboException;
import com.weibo.sdk.android.keep.AccessTokenKeeper;
public class MainActivity extends Activity {
private Weibo mWeibo; //Weibo引用对象
public static Oauth2AccessToken accessToken; //访问token
private Button oauthBtn;
private TextView mText;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取Weibo引用对象,传入appkey和回调url
mWeibo = Weibo.getInstance(ConstantS.APP_KEY, ConstantS.REDIRECT_URL);
mText = (TextView) findViewById(R.id.show);
oauthBtn = (Button) findViewById(R.id.oauthBtn);
MainActivity.accessToken = AccessTokenKeeper.readAccessToken(this);
oauthBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mWeibo.authorize(MainActivity.this, new AuthDialogListener());
}
});
}
public class AuthDialogListener implements WeiboAuthListener {
@Override
public void onCancel() {
//Oauth2.0认证过程中,如果认证窗口被关闭或认证取消时调用
Toast.makeText(getApplicationContext(), “Auth cancel” , Toast.LENGTH_LONG).show();
}
@Override
public void onComplete(Bundle values) {
// 认证结束后调用此方法
String token = values.getString(“access_token”);// 表明用户身份的token,用于微博API的调用
String expires_in = values.getString(“expires_in”);// 过期时间,用于判断登录是否过程
System.out.println(expires_in);
MainActivity.accessToken = new Oauth2AccessToken(token, expires_in);
String date = new SimpleDateFormat(“yyyy/MM/dd HH:mm:ss”)
.format(new java.util.Date(MainActivity.accessToken
.getExpiresTime()));
mText.setText("认证成功: \r\n access_token: " + token + “\r\n”
- "expires_in: " + expires_in + “\r\n有效期:” + date);
AccessTokenKeeper.keepAccessToken(MainActivity.this, accessToken);
Toast.makeText(MainActivity.this, “认证成功”, Toast.LENGTH_SHORT)
.show();
}
@Override
public void onError(WeiboDialogError e) {
//Oauth2.0认证过程中,当认证对话框中的webView接收数据出现错误时调用此方法
Toast.makeText(getApplicationContext(), “Auth error:” + e.getMessage(), Toast.LENGTH_LONG).show();
}
@Override
public void onWeiboException(WeiboException e) {
//当认证过程中捕获到WeiboException时调用
Toast.makeText(getApplicationContext(), “Auth exception:” + e.getMessage(), Toast.LENGTH_LONG).show();
}
}
}
package com.weibo.sdk.android.demo;
/**
-
定义一个常量接口,方便管理常量
-
@author wwj
*/
public interface ConstantS {
// 应用的key请到官方申请正式的appkey替换APP_KEY
public static final String APP_KEY = “249239496”;
// 替换为开发者REDIRECT_URL
public static final String REDIRECT_URL = “http://www.sina.com”;
// 新支持scope,支持传入多个scope权限,用逗号分隔
public static final String SCOPE = “email,direct_messages_read,direct_messages_write,” +
“friendships_groups_read,friendships_groups_write,statuses_to_me_read,” +
“follow_app_official_microblog”;
}
原本SCOPE是要用在新版的SDK中,这是新增的一个参数
方法声明是这样的:
public static Weibo getInstance(java.lang.String appKey,
java.lang.String redirectUrl,
java.lang.String aScope)
微博初始化函数,需要优先其他函数调用.如果appKey或redirectUrl为空,默认抛出RuntimeException
参数:
appKey
- 第三方应用的appkey
redirectUrl
- 第三方应用的回调页
返回:
Weibo的实例
抛出:
java.lang.RuntimeException
4./OauthTest/src/com/weibo/sdk/android/keep/AccessTokenKeeper.java
package com.weibo.sdk.android.keep;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import com.weibo.sdk.android.Oauth2AccessToken;
/**
-
该类用于保存Oauth2AccessToken到sharepreference,并提供读取功能
-
@author wwj
*/
public class AccessTokenKeeper {
private static final String PREFERENCES_NAME = “com_weibo_sdk_android”;
/**
-
保存accsssToken到SharedPreferences
-
@param context 上下文对象
-
@param token Oauth2AccessToken
*/
public static void keepAccessToken(Context context, Oauth2AccessToken token) {
SharedPreferences pref = context.getSharedPreferences(PREFERENCES_NAME, Context.MODE_APPEND);
Editor editor = pref.edit();
editor.putString(“token”, token.getToken());
editor.putLong(“expiresTime”, token.getExpiresTime());
editor.commit();
}
/**
-
清空sharedPreferences
-
@param context
*/
public static void clear(Context context) {
SharedPreferences pref = context.getSharedPreferences(PREFERENCES_NAME, Context.MODE_APPEND);
Editor editor = pref.edit();
editor.clear();
editor.commit();
}
/**
-
从SharedPreferences读取accessToken
-
@param context
-
@return Oauth2AccessToken
*/
public static Oauth2AccessToken readAccessToken(Context context) {
Oauth2AccessToken token = new Oauth2AccessToken();
SharedPreferences pref = context.getSharedPreferences(PREFERENCES_NAME, Context.MODE_APPEND);
token.setToken(pref.getString(“token”, “”));
token.setExpiresTime(pref.getLong(“expiresTime”, 0));
return token;
}
}
最后
今天关于面试的分享就到这里,还是那句话,有些东西你不仅要懂,而且要能够很好地表达出来,能够让面试官认可你的理解,例如Handler机制,这个是面试必问之题。有些晦涩的点,或许它只活在面试当中,实际工作当中你压根不会用到它,但是你要知道它是什么东西。
最后在这里小编分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司20年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。
还有 高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。
【Android核心高级技术PDF文档,BAT大厂面试真题解析】
【算法合集】
【延伸Android必备知识点】
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!
阿里、美团等公司20年的面试题**,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。
还有 高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。
【Android核心高级技术PDF文档,BAT大厂面试真题解析】
[外链图片转存中…(img-veXZhggn-1715097623379)]
【算法合集】
[外链图片转存中…(img-5z1zogVk-1715097623385)]
【延伸Android必备知识点】
[外链图片转存中…(img-XzIwFZPI-1715097623386)]
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!