我已将Twitter
集成到我的应用程序中(使用OAuth
和twitter4j
库)代表用户更新用户帐户的状态。这很好用。
在更新状态之前,我会在Shared Preferences
核对已存储的AccessToken
。如果它可用,即用户登录,则更新状态,否则用户未登录,因此显示用户登录的推特页面。
问题是,如果用户已登录,因此我AccessToken
中有Shared Preferences
现在,如果用户撤消应用程序的权限,我尝试发布状态,然后它会发出此异常或错误。
我如何知道用户已撤销权限,因此我需要申请授权?
编辑:我知道如何处理未经授权的访问,我处理了它。但是仍然会抛出这个异常。
答案 0 :(得分:3)
这可能听起来很奇怪但是会尝试自动设置您的时间/日期更新。根据我以前的经验,这就是问题所在。当我设置此项并且在同步手机时间后,一切正常。
然后试试这个: -
// ConfigurationBuilder
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.setOAuthConsumerKey(twitterConsumerKey);
builder.setOAuthConsumerSecret(twitterConsumerSecret);
// Access Token from sharedPreference
String access_token = mSharedPreferences.getString(TwitterConstants.PREF_KEY_OAUTH_TOKEN, "");
// Access Token Secret from sharedPreference
String access_token_secret = mSharedPreferences.getString(TwitterConstants.PREF_KEY_OAUTH_SECRET, "");
AccessToken accessToken = new AccessToken(access_token, access_token_secret);
twitter = new TwitterFactory(builder.build()).getInstance(accessToken);
// Getting user details from twitter
// For now i am getting his name only
long userID = accessToken.getUserId();
User user = twitter.showUser(userID);
String username = user.getName() + " (" + user.getScreenName() + ")";
答案 1 :(得分:0)
我解决了这个问题。问题是我正在测试用户取消对应用程序进行授权时的操作。我从twitter帐户中未经授权申请,我曾在dev.twitter.com上创建应用程序。这样做会使我的accesstoken无效,这个存储在共享首选项中,因此当我从共享首选项中获取并使用它时,我的代码中,我曾经得到异常。
解决方案是在dev.twitter.com上创建的应用程序中重新创建一个accessstoken。在我的代码中,我添加了这个条件:
catch (TwitterException e) {
if (e.getStatusCode() == -1) {
// This is the case when the developer who created the application has revoked the application permission.
// In this case we need to remove stored access token as it is no longer valid.
// Logging in again will fetch newer accesstoken and will solve the problem.
logoutFromTwitter();
loginToTwitter();
}
}