在从网页转回之后进行oauth时,提供程序为空

问题描述:

我在android中使用signpost-oauth do oauth,并且在登录网页后返回到Activity,提供程序有时为null。在从网页转回之后进行oauth时,提供程序为空

public class LoginActivity extends Activity implements View.OnClickListener { 

private static OAuthConsumer consumer; 
private static OAuthProvider provider; 

private static final Uri CALLBACK= Uri.parse("xxx://callback?"); 

... 

@Override 
protected void onNewIntent(Intent intent) { 
     super.onNewIntent(intent); 
     final Uri uri = intent.getData(); 
     if (uri != null && uri.toString().startsWith(CALLBACK)) { 

      final String pin = uri.getQueryParameter(OAuth.OAUTH_VERIFIER); 

      try { 
       //provider.setOAuth10a(true); 
       provider.retrieveAccessToken(consumer, pin); 
        } catch (final Exception e) { 

      } 
      } 
} 
... 

@Override 
public void onClick(View v) { 
    switch (v.getId()) { 
    case R.id.oAuthLoginBtn: 
     new Thread(new Runnable() { 
     public void run() { 
      LoginActivity.consumer = new CommonsHttpOAuthConsumer(
          apiKey, appSecret); 
      LoginActivity.provider = new CommonsHttpOAuthProvider(
          oauthUrl + Data.REQUEST_TOKEN_URL, oauthUrl 
            + Data.ACCESS_TOKEN_URL, oauthUrl 
            + Data.AUTHORIZE_URL); 

    LoginActivity.provider.setOAuth10a(true); 
      try { 
         final String authUrl = LoginActivity.provider 
           .retrieveRequestToken(LoginActivity.consumer, 
             CALLBACK); 

         final Uri uri = Uri.parse(authUrl); 
         final Intent it = new Intent(Intent.ACTION_VIEW, uri); 
         LoginActivity.this.startActivity(it); 
     } catch (final Exception e) { 

      } 
     } 
     }).start(); 
     break; 
    } 

}

和manifest.xml中

<activity android:name=".ui.LoginActivity" android:label="@string/activity_login" 
      android:launchMode="singleInstance" android:configChanges="orientation|keyboardHidden"> 
      <intent-filter> 
       <action android:name="android.intent.action.VIEW" /> 
       <category android:name="android.intent.category.DEFAULT" /> 
       <category android:name="android.intent.category.BROWSABLE" /> 
       <data android:scheme="xxx" /> 
      </intent-filter> 
     </activity> 

我不知道为什么提供商是空的时候。

我认为你没有收到正确的oauth_token和oauth_verifier。定义主机

<data android:scheme="xxx" android:host="twitt" /> 

您将收到正确的值。

xxx://twitt?oauth_token=it23W5yOy13x6s1ox6kpaOow2aM70OKTW3WTy4h8Q4&oauth_verifier=gRuGGE4osgjTwltooi9MG4u7a4EbxAsIxvVjZqd9dA 
+0

嗨,我使用此: XXX://回调oauth_verifier = IMoNvawE3nA56zW8dkPl9L%2FR&组oauth_token = 4%2FuvcAWpzjMNcRBvLKwW4xn9GZDp2a --- ----------------------------- 我会测试它一段时间,看它是否仍然为空,thx。 – kmlzkma 2010-07-22 02:56:22

+0

嗨我已经移动此行Provider.setOAuth10a(true);并将CALLBACK定义为一个静态变量!,并且我有一个问题,为什么不使用onResume()而不是onNewIntent()? – Jorgesys 2010-07-23 15:04:48

+0

嗨,我发现它有时仍然是空的。我在manifest.xml中使用launchMode =“singleInstance”,所以必须使用onNewIntent()来接收它。 – kmlzkma 2010-08-29 00:55:57

也许<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />和/或<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />丢失?