0

Twitter にツイートと画像を投稿できる Android アプリケーションで作業しています。私はtwitter4j-core-2.1.11を使用していました。twitter4j-core-2.1.11にはツイート中にアップロード画像を追加するプロパティがないため、twitter4j-core-2.2.5.jarにアップグレードしました。

これは、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 に答える