我正在尝试推特工作。
我收到的错误是: 授权失败(服务器回复401)。如果使用者密钥不正确或签名不匹配,则会发生这种情况
我已经在stackoverflow上检查了很多相同的问题,这里我已经尝试过了: 1)检查了用户密钥(与dev.twitter.com上的密钥相同) 2)在dev.twitter.com上为我的应用添加了回调URL 3)更新库到twitter-4j-core-3.0.5.jar 4)检查我的平板电脑的时间是否正确(设置东欧时间)
此外,我必须说,在一个月前Twitter应用程序正常工作。然后它以某种方式崩溃了。
这是我的代码:
class GetOAuthVerifierTask extends AsyncTask<Void, Void, String> {
private Context context;
public GetOAuthVerifierTask(Context context) {
this.context = context;
dialog = ProgressDialog.show(TwitterActivity.this, getString(CANNOT_GET_REQUEST_TOKEN), null);
}
@Override
protected String doInBackground(Void... params) {
TwitterUtils twitterUtils = TwitterUtils.getInstance();
OAuthConsumer consumer = twitterUtils.createConsumer();
OAuthProvider provider = twitterUtils.createProvider();
try {
final String url = provider.retrieveRequestToken(consumer,
twitterUtils.getCallbackURL(context));
twitterUtils.setConsumerToken(context, consumer.getToken());
twitterUtils.setConsumerSekretToken(context, consumer.getTokenSecret());
return url;
} catch (Exception e) {
Logger.debug("Can not retrieve request token");
Logger.error(e.getMessage(), e);
return null;
}
}
@Override
protected void onPostExecute(String url) {
dialog.dismiss();
if (url != null){
// HERE IT WORKS CORRECT
web.loadUrl(url);
}
else{
Toast.makeText(TwitterActivity.this, getString(DOWNLOAD_WAIT_MESSAGE),
Toast.LENGTH_LONG).show();
}
}
}
class GetAccessTokenTask extends AsyncTask<Uri, Void, Boolean> {
@Override
protected void onPreExecute() {
dialog = ProgressDialog.show(TwitterActivity.this, getString(CANNOT_GET_REQUEST_TOKEN), null);
}
@Override
protected Boolean doInBackground(Uri... params) {
TwitterUtils twitterUtils = TwitterUtils.getInstance();
String oauthVerifier = params[0].getQueryParameter(OAuth.OAUTH_VERIFIER);
OAuthConsumer consumer = twitterUtils.createConsumer();
consumer.setTokenWithSecret(twitterUtils.getConsumerToken(TwitterActivity.this),
twitterUtils.getConsumerSekretToken(TwitterActivity.this));
OAuthProvider provider = twitterUtils.createProvider();
try {
provider.retrieveAccessToken(consumer, oauthVerifier);
twitterUtils.setAccessToken(TwitterActivity.this, consumer.getToken());
twitterUtils.setAccessTokenSecret(TwitterActivity.this, consumer.getTokenSecret());
} catch (Exception e) {
Logger.debug("Can not retrieve access token");
Logger.error(e.getMessage(), e);
return false;
}
return true;
}
@Override
protected void onPostExecute(Boolean result) {
dialog.dismiss();
if (result) {
TwitterActivity.this.sendMessage();
TwitterActivity.this.finish();
} else {
// HERE I GET 401
Toast.makeText(TwitterActivity.this, getString(DOWNLOAD_WAIT_MESSAGE),
Toast.LENGTH_LONG).show();
}
}
}
答案 0 :(得分:2)
刚刚找到解决方案: 我添加了一行 provider.setOAuth10a(真); (对于我的OAuthProvider)
在源代码中找到了解释: // 1.0a期望在获取请求令牌时发送回调。 // 1.0服务提供商只会忽略此参数。
答案 1 :(得分:1)
在上个月,一直是change to the Twitter API。您现在可以仅使用HTTPS调用它。
您应该确保您/您的图书馆使用的网址以
开头https://api.twitter.com/1.1/
(注意s
之后的额外http
。)
您可能需要咨询twitter4j的维护者。