0

以下のように Twitter を使用するアプリケーション内で共有ボタンを使用しています。

 public class TwitterApp {
        private Twitter mTwitter;
        private TwitterSession mSession;
        private AccessToken mAccessToken;
        private CommonsHttpOAuthConsumer mHttpOauthConsumer;
        private OAuthProvider mHttpOauthprovider;
        private String mConsumerKey;
        private String mSecretKey;
        private ProgressDialog mProgressDlg;
        private TwDialogListener mListener;
        private Context context;

        public static final String CALLBACK_URL = "http://www.rommanapps.com";
        private static final String TAG = "TwitterApp";

        public TwitterApp(Context context, String consumerKey, String secretKey) {
            this.context    = context;

            mTwitter        = new TwitterFactory().getInstance();
            mSession        = new TwitterSession(context);
            mProgressDlg    = new ProgressDialog(context);

            mProgressDlg.requestWindowFeature(Window.FEATURE_NO_TITLE);

            mConsumerKey    = consumerKey;
            mSecretKey      = secretKey;
                mTwitter.setOAuthConsumer(consumerKey, secretKey);

            mHttpOauthConsumer = new CommonsHttpOAuthConsumer(mConsumerKey, mSecretKey);
            mHttpOauthprovider = new DefaultOAuthProvider("https://api.twitter.com/oauth/request_token",
                                                         "https://api.twitter.com/oauth/access_token",
                                                         "https://api.twitter.com/oauth/authorize");

            mAccessToken    = mSession.getAccessToken();

            configureToken();
        }

        public void setListener(TwDialogListener listener) {
            mListener = listener;
        }

        @SuppressWarnings("deprecation")
        private void configureToken() {
            if (mAccessToken != null) {
                mTwitter.setOAuthConsumer(mConsumerKey, mSecretKey);


                    mTwitter.setOAuthAccessToken(mAccessToken);

            }
        }

        public boolean hasAccessToken() {
            return (mAccessToken == null) ? false : true;
        }

        public void resetAccessToken() {
            if (mAccessToken != null) {
                mSession.resetAccessToken();

                mAccessToken = null;
            }
        }

        public String getUsername() {
            return mSession.getUsername();
        }

        public void updateStatus(String status) throws Exception {
            try {
                mTwitter.updateStatus(status);
            } catch (TwitterException e) {
                throw e;
            }
        }

        public void authorize() {
            mProgressDlg.setMessage("Initializing ...");
            mProgressDlg.show();

            new Thread() {
                @Override
                public void run() {
                    String authUrl = "";
                    int what = 1;

                    try {
                        authUrl = mHttpOauthprovider.retrieveRequestToken(mHttpOauthConsumer, CALLBACK_URL);    

                        what = 0;

                        Log.d(TAG, "Request token url " + authUrl);
                    } catch (Exception e) {
                        Log.d(TAG, "Failed to get request token");

                        e.printStackTrace();
                    }

                    mHandler.sendMessage(mHandler.obtainMessage(what, 1, 0, authUrl));
                }
            }.start();
        }

        public void processToken(String callbackUrl)  {
            mProgressDlg.setMessage("Finalizing ...");
            mProgressDlg.show();

            final String verifier = getVerifier(callbackUrl);

            new Thread() {
                @Override
                public void run() {
                    int what = 1;

                    try {
                        mHttpOauthprovider.retrieveAccessToken(mHttpOauthConsumer, verifier);

                        mAccessToken = new AccessToken(mHttpOauthConsumer.getToken(), mHttpOauthConsumer.getTokenSecret());

                        configureToken();

                        User user = mTwitter.verifyCredentials();

                        mSession.storeAccessToken(mAccessToken, user.getName());

                        what = 0;
                    } catch (Exception e){
                        Log.d(TAG, "Error getting access token");

                        e.printStackTrace();
                    }

                    mHandler.sendMessage(mHandler.obtainMessage(what, 2, 0));
                }
            }.start();
        }

        private String getVerifier(String callbackUrl) {
            String verifier  = "";

            try {
                callbackUrl = callbackUrl.replace("twitterapp", "http");

                URL url         = new URL(callbackUrl);
                String query    = url.getQuery();

                String array[]  = query.split("&");

                for (String parameter : array) {
                     String v[] = parameter.split("=");

                     if (URLDecoder.decode(v[0]).equals(oauth.signpost.OAuth.OAUTH_VERIFIER)) {
                         verifier = URLDecoder.decode(v[1]);
                         break;
                     }
                }
            } catch (MalformedURLException e) {
                e.printStackTrace();
            }

            return verifier;
        }

        private void showLoginDialog(String url) {
            final TwDialogListener listener = new TwDialogListener() {
                @Override
                public void onComplete(String value) {
                    processToken(value);
                }

                @Override
                public void onError(String value) {
                    mListener.onError("Failed opening authorization page");
                }
            };

            new TwitterDialog(context, url, listener).show();
        }

        private Handler mHandler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                mProgressDlg.dismiss();

                if (msg.what == 1) {
                    if (msg.arg1 == 1)
                        mListener.onError("Error getting request token");
                    else
                        mListener.onError("Error getting access token");
                } else {
                    if (msg.arg1 == 1)
                        showLoginDialog((String) msg.obj);
                    else
                        mListener.onComplete("");
                }
            }
        };

        public interface TwDialogListener {
            public void onComplete(String value);       

            public void onError(String value);
        }
    }

このステートメントには誤りがあります

  1. mHttpOauthprovider = new DefaultOAuthProvider("https://api.twitter.com/oauth/request_token", "https://api.twitter.com/oauth/access_token", "https://api.twitter.com/oauth/許可する");

コンストラクタDefaultOAuthProvider (String, String, String) は未定義です

  1. mAccessToken = mSession.getAccessToken();

タイプの不一致: twitter4j.auth.AccessTokenから twitter4j.http.AccessToken に変換できません

そして、どこに問題があるのか​​ わかりません!助けてください

4

1 に答える 1

0

以下のリンクで利用可能なライブラリを使用しました。facebook や linkin と一緒に、twitter を Android アプリケーションに簡単に統合するのに役立ちます。

プロジェクトはまた、ソーシャルクライアントをすぐに追加することを検討していると述べています.

http://socialauth.in/

于 2012-12-17T12:05:05.720 に答える