在从网页转回之后进行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
答
也许<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
和/或<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
丢失?
嗨,我使用此: XXX://回调oauth_verifier = IMoNvawE3nA56zW8dkPl9L%2FR&组oauth_token = 4%2FuvcAWpzjMNcRBvLKwW4xn9GZDp2a --- ----------------------------- 我会测试它一段时间,看它是否仍然为空,thx。 – kmlzkma 2010-07-22 02:56:22
嗨我已经移动此行Provider.setOAuth10a(true);并将CALLBACK定义为一个静态变量!,并且我有一个问题,为什么不使用onResume()而不是onNewIntent()? – Jorgesys 2010-07-23 15:04:48
嗨,我发现它有时仍然是空的。我在manifest.xml中使用launchMode =“singleInstance”,所以必须使用onNewIntent()来接收它。 – kmlzkma 2010-08-29 00:55:57