2012-12-17 40 views
0

我用我的應用程序,如波紋管使用Twitter內部的分享按鈕:Twitter共享使用Android的錯誤

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 =新DefaultOAuthProvider錯誤( 「https://api.twitter.com/oauth/request_token」, 「https://api.twitter.com/oauth/access_token」, 「https://api.twitter.com/oauth/authorize」) ;

它說構造DefaultOAuthProvider(字符串,字符串,字符串)是未定義

  1. mAccessToken = mSession.getAccessToken();

它說類型不匹配:不能從twitter4j.auth.AccessToken轉換爲twitter4j.http.AccessToken

而且我不知道問題出在哪裏!請幫助

+1

這些是編譯時錯誤,您需要修復您的應用程序。也許您正在使用與您正在使用的庫的當前API不兼容的樣本(twitter4j)。 –

回答

0

我已經在下面的鏈接中使用了庫。它可以幫助我輕鬆地將twitter與facebook和linkedin一起集成到我的android應用程序中。

該項目還表示,他們希望儘快增加更多的社交客戶。

http://socialauth.in/