0

我正在开发一个可以将推文和图片发布到 Twitter 的 Android 应用程序。我使用的是 twitter4j-core-2.1.11。现在我已经升级到 twitter4j-core-2.2.5.jar,因为 twitter4j-core-2.1.11 没有在发推文时添加上传图片的属性。

这是我用来在 twitter4j-core-2.1.11 中进行身份验证的代码。

public static boolean isAuthenticated(SharedPreferences prefs) {
  String token = prefs.getString(OAuth.OAUTH_TOKEN, "");
  String secret = prefs.getString(OAuth.OAUTH_TOKEN_SECRET, "");
  AccessToken accesstoken = new AccessToken(token, secret);
  Twitter twitter = new TwitterFactory().getInstance();
  twitter.setOAuthConsumer(Constants.CONSUMER_KEY, Constants.CONSUMER_SECRET);
  twitter.setOAuthAccessToken(accesstoken);
  try {
    twitter.getAccountSettings();
      return true;
  } catch (TwitterException e) {
    return false;
  }
}

现在我得到错误:

AndroidRuntime(694):原因:java.lang.IllegalArgumentException:访问令牌格式无效。

4

1 回答 1

1
Do like this way

    RequestToken requestToken=twitter.getOAuthRequestToken(getResources().getString(R.string.callback));
    webView.loadUrl(requestToken.getAuthenticationURL()+"&force_login=true");

webView.setWebViewClient(new WebViewClient(){
                @Override
                public boolean shouldOverrideUrlLoading(WebView view, String url) {
                    try {
                        if(url.startsWith(getString(R.string.callback)))
                        {
                            List<NameValuePair> list = URLEncodedUtils.parse(new URI(url), "utf-8");
                            String oauthVerifier="";
                            Iterator<NameValuePair> iter = list.iterator();
                            while (iter.hasNext()) {
                                NameValuePair param = iter.next();
                                if(param.getName().equals("oauth_verifier"))
                                {
                                    oauthVerifier = param.getValue();
                                    break;
                                }
                            }       

                            accessToken = twitter.getOAuthAccessToken(requestToken,oauthVerifier);
                            twitter.setOAuthAccessToken(accessToken);
                            setResult(1);
                            finish();
                            getAccountSettings();
                        }
                        else
                            return false;
                    } catch (Exception e) {

                        e.printStackTrace();
                        return false;
                    }
                }

                @Override
                public void onPageFinished(WebView view, String url) {
                    stopProgress();
                    super.onPageFinished(view, url);

                }
            });


private boolean getAccountSettings(){
    try {
            twitter.getAccountSettings();
            return true;
        } catch (TwitterException e) {
            return false;
        }
}
于 2012-05-22T11:46:24.467 回答