2013-01-07 30 views
0

我在OAuth簽名中遇到了一些麻煩。OAuth1a retrieveRequestToken throw null

對我期望得到retrieveRequestToken我得到了以下錯誤點:

01-05 17:26:02.775: W/System.err(24358): oauth.signpost.exception.OAuthCommunicationException: Communication with the service provider failed: null 

我不知道爲什麼我得到這個。這裏有什麼建議?

我的代碼:

connectionDec = new ConnectionDetector(getApplicationContext()); 

// Check if Internet present 
if (!connectionDec.isConnectingToInternet()) 
{ 
// Internet Connection is not present 
// alert.showAlertDialog(MainActivity.this, 
// "Internet Connection Error", 
// "Please connect to working Internet connection", false); 
// stop executing code by return 
return; 
} 

CommonsHttpOAuthConsumer consumer = 
new CommonsHttpOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET); 
CommonsHttpOAuthProvider provider = 
new CommonsHttpOAuthProvider(REQUEST_TOKEN_URL, ACCESS_TOKEN_URL, 
AUTHORIZE_URL); 
provider.setOAuth10a(true); 

sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); 
String token = sharedPreferences.getString("token", null); 
String tokenSecret = sharedPreferences.getString("token_secret", null); 

if (token == null || tokenSecret == null) 
{ 
Map requestHeaders = provider.getRequestHeaders(); 
requestHeaders.put("User-Agent", USER_AGENT); 
requestHeaders.put("Accept-Encoding", "gzip"); 

try 
{ 
String authUrl = provider.retrieveRequestToken(consumer, CALLBACK_URL); 
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(authUrl))); 
} 
catch (OAuthMessageSignerException e) 
{ 
e.printStackTrace(); 
} 
catch (OAuthNotAuthorizedException e) 
{ 
e.printStackTrace(); 
} 
catch (OAuthExpectationFailedException e) 
{ 
e.printStackTrace(); 
} 
catch (OAuthCommunicationException e) 
{ 
e.printStackTrace(); 
} 
} 
else 
{ 
} 

任何的竅門和幫助......謝謝

PS:這是Discogs,而不是Twitter的

電賀瘋狂

回答

0

OK,我已經回答這個問題我自己...我已經實施了一個asynctask像下面這樣,它的工作原理:

public class StartUpActivity extends Activity implements OnClickListener 
{ 

    private static String CONSUMER_KEY = "consumerkey"; 
    private static String CONSUMER_SECRET = "yourconsumersecret"; 
    private static String REQUEST_TOKEN_URL = "http://api.discogs.com/oauth/request_token"; 
    private static String AUTHORIZE_URL = "http://www.discogs.com/oauth/authorize"; 
    private static String ACCESS_TOKEN_URL = "http://api.discogs.com/oauth/access_token"; 
    private static String USER_AGENT = "youruseragent"; 
    private static String CALLBACK_URL = "http://www.callback.com"; 

    private ConnectionDetector connectionDec; 
    private SharedPreferences sharedPreferences; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.start_up_layout); 

     connectionDec = new ConnectionDetector(getApplicationContext()); 

     // Check if Internet present 
     if (!connectionDec.isConnectingToInternet()) 
     { 
      // Internet Connection is not present 
      // alert.showAlertDialog(MainActivity.this, 
      // "Internet Connection Error", 
      // "Please connect to working Internet connection", false); 
      // stop executing code by return 
      return; 
     } 

    } 

    class ProgressTask extends AsyncTask<Integer, Integer, Void>{ 

     @Override 
     protected void onPreExecute() { 
      // initialize the progress bar 
      // set maximum progress to 100. 
     } 

     @Override 
     protected void onCancelled() { 
      // stop the progress 
     } 

     @Override 
     protected Void doInBackground(Integer... params) { 
      // get the initial starting value 
      int start=params[0]; 
      // increment the progress 
       try { 
        CommonsHttpOAuthConsumer consumer = new CommonsHttpOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET); 
        CommonsHttpOAuthProvider provider = 
          new CommonsHttpOAuthProvider(REQUEST_TOKEN_URL, ACCESS_TOKEN_URL, AUTHORIZE_URL); 
        provider.setOAuth10a(true); 

        // Check if token and tokensecret are already stored at app preferences 
        sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
        String token = sharedPreferences.getString("token", null); 
        String tokenSecret = sharedPreferences.getString("token_secret", null); 

        if (token == null || tokenSecret == null) 
        { 
         Map<String, String> requestHeaders = provider.getRequestHeaders(); 
         requestHeaders.put("User-Agent", USER_AGENT); 
         requestHeaders.put("Accept-Encoding", "gzip"); 

         try 
         { 
          String authUrl = provider.retrieveRequestToken(consumer, CALLBACK_URL); 
          startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(authUrl))); 
         } 
         catch (OAuthMessageSignerException e) 
         { 
          e.printStackTrace(); 
         } 
         catch (OAuthNotAuthorizedException e) 
         { 
          e.printStackTrace(); 
         } 
         catch (OAuthExpectationFailedException e) 
         { 
          e.printStackTrace(); 
         } 
         catch (OAuthCommunicationException e) 
         { 
          e.printStackTrace(); 
         } 
        } 
        else 
        { 

        } 

        } 

       catch (Exception e) { 
       } 

      return null; 
     } 

     @Override 
     protected void onProgressUpdate(Integer... values) { 
      // increment progress bar by progress value 
     } 

     @Override 
     protected void onPostExecute(Void result) { 
      // async task finished 
     } 
    } 
} 
+0

有關你如何設法做到這一點的更多細節不會受到傷害。 – Viccari

+0

請添加您用於解決問題的重點樣本代碼,以便將來可以從其中獲益。 – Nope

+0

可以你的代碼,當然我有同樣的問題 –