转自:http://blog.sina.com.cn/s/blog_5de73d0b01014k87.html
在使用新浪微博开放平台进行项目开发的时候,会遇到这样的情况。
当用户第一次登录成功之后,为了让用户在下次启动应用时无须再进行登录,
此时需要把Access Token保存到SharedPreferences中,当启动应用时,
把Access Token从SharedPreferences读取出来,并设置到Weibo类中,随后
的操作中,就可以随意request了。
但是,有个问题时,很多人使用上面方法的时候,都会出现Auth failed的情况。
如:
已经通过隐式授权获取到了AccessToken,然后如下保存了access_token
sp.edit().putString("sina_access_token",token).commit();
在下次登录时,我就从SharedPrefence里取出access_token,然后构造AccessToken对象
AccessToken accessToken = newAccessToken(sp.getString("sina_access_token", ""),CONSUMER_SECRET);
Weibo.getInstance().setAccessToken(accessToken);
然后使用Weibo对象去调用request(.... ,mWeibo.getAccessToken)。
但是,这样子不行!会出现“Auth failed!”提示。
-------------------------------------
下面是原因和解决方法
在android4weiboSDK中,有个地方,if判断写的不太好,把accessToken给跳过了,没有写到header里面。
错误的位置在Utility类中的140行左右
if (!isBundleEmpty(authParam) &&mAuth != null) {
......
......
}
mauth为空,就会使accessToken不能写入header
只需要在前面加个set方法,是mauth不为空就好了
Utility.setAuthorization(new Oauth2AccessTokenHeader());
//防止mAuth为null,导致21301的error
就是说,在设置Access Token之前加上那句代码就可以了,如下:
Utility.setAuthorization(newOauth2AccessTokenHeader());
AccessToken accessToken = newAccessToken(sp.getString("sina_access_token", ""),CONSUMER_SECRET);
Weibo.getInstance().setAccessToken(accessToken);