2011-01-24 9 views
3

私のアプリが期待どおり機能しない理由を4日間把握しようとしています。android - twitter:コールバックを受信しましたが、表示されません。

私のアプリはTwitterでOAuthを使用したいと思っています(動作しています)。コールバックではonNewIntentメソッドを入力する必要があります。それはしていないし、私は理由を理解することはできません。

twitterボタンをクリックすると、自分の認証情報を入力できるウェブページが開きます。その後、私はそれが成功したと私は私のアプリにリダイレクトされることを示す画面が表示されます。私は私のアプリケーションに戻りますが、onNewIntentメソッドは呼び出されません。私は、onNewIntendメソッドの開始時にブレークポイントを設定し、デバッガを起動しました。その方法では止まらない!それは他のメソッドでは止まり、デバッガにはなりません。

下から3行目のログファイル(付属)に、新しいインテントが開始されていることがわかります。だからここで何が起こっているの?

説明できますか?私は非常に混乱しています。

これはtwitterbuttonがクリックされたときにトリガされます私のコードです:

callBackURL = "myapp://twitactivity"; 
httpOauthConsumer = new CommonsHttpOAuthConsumer(consKey, consSec); 
httpOauthProvider = new DefaultOAuthProvider("http://twitter.com/oauth/request_token","http://twitter.com/oauth/access_token", "http://twitter.com/oauth/authorize"); 

String authUrl = httpOauthProvider.retrieveRequestToken(httpOauthConsumer, callBackURL); 
startActivity(new Intent(Intent.ACTION_VIEW,Uri.parse(authUrl))); 

は、これは私のonNewIntentメソッドの開始コードです:

public void onNewIntent(Intent intent) { 
    super.onNewIntent(intent); 
    Log.i("onNewIntent", "Yep success."); 
    Uri uri = intent.getData(); 
    if(uri != null && uri.toString().startsWith(callBackURL)) { 
     String verifier = uri.getQueryParameter(oauth.signpost.OAuth.OAUTH_VERIFIER); 
    etc...... 

私はまた私のマニフェストファイルに次のように持っています:

<activity android:name=".TwitterScreen"> 
    <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="myapp" android:host="twitactivity" /> 
    </intent-filter> 
</activity> 

そして、これは私が私のログファイルに見えるものです:

01-24 10:23:36.064: INFO/ActivityManager(61): Displayed activity nl.gemoro.android.demo/.TwitterScreen: 6660 ms (total 6660 ms) 
01-24 10:23:38.614: INFO/global(348): Default buffer size used in BufferedReader constructor. It would be better to be explicit if an 8k-char buffer is required. 
01-24 10:23:44.025: INFO/ActivityManager(61): Starting activity: Intent { act=android.intent.action.VIEW dat=http://twitter.com/oauth/authorize?oauth_token=KjCUNMKg13OClyRjQff94QWKfoRBUpNLE2uF9cJkHA cmp=com.android.browser/.BrowserActivity } 
01-24 10:23:44.185: INFO/ActivityManager(61): Start proc com.android.browser for activity com.android.browser/.BrowserActivity: pid=355 uid=10034 gids={3003, 1015} 
01-24 10:23:44.724: INFO/ActivityThread(355): Publishing provider browser: com.android.browser.BrowserProvider 
01-24 10:23:46.704: INFO/ActivityManager(61): Displayed activity com.android.browser/.BrowserActivity: 2544 ms (total 2544 ms) 
01-24 10:23:53.624: WARN/KeyCharacterMap(355): No keyboard for id 0 
01-24 10:23:53.624: WARN/KeyCharacterMap(355): Using default keymap: /system/usr/keychars/qwerty.kcm.bin 
01-24 10:23:54.574: DEBUG/dalvikvm(348): GC_EXPLICIT freed 3965 objects/267064 bytes in 2364ms 
01-24 10:24:01.064: INFO/ActivityManager(61): Starting activity: Intent { act=android.intent.action.VIEW cat=[android.intent.category.BROWSABLE] dat=myapp://twitactivity?oauth_token=KjCUNMKg13OClyRjQff94QWKfoRBUpNLE2uF9cJkHA&oauth_verifier=41owXswx5TsxHhRyiviFRkRvcpdekm7akRa2IFFM cmp=nl.gemoro.android.demo/.TwitterScreen } 
01-24 10:24:02.174: INFO/global(348): Default buffer size used in BufferedReader constructor. It would be better to be explicit if an 8k-char buffer is required. 
01-24 10:24:03.594: INFO/ActivityManager(61): Displayed activity nl.gemoro.android.demo/.TwitterScreen: 2412 ms (total 2412 ms) 

答えて

4

あなたはTwitterからデータを取得

ので

@Override 
protected void onResume() { 
    super.onResume(); 
    Uri uri = getIntent().getData(); 
      Uri CALLBACK_URI = Uri.parse("myapp://twitactivity"); 
     if (uri != null && CALLBACK_URI.getScheme().equals(uri.getScheme())) { 
       String oauth_token=ri.getQueryParameter("oauth_token"); 
    String oauth_verifier= uri.getQueryParameter("oauth_verifier"); 
    Intent i = new Intent(this, YourClass.class); // Go to your activity 
    startActivity(i); 
          } 

ようなあなたの onResume()方法でTwitterのサービスからデータを取得する必要があり、今、あなたは新しい活動を始め

+0

これを試しましたか? –

+0

私も上記の問題に直面し、あなたの解決策を試しました。私はtwitterに2回アクセスできましたが、できませんでした。同じ例外が発生しています。問題が発生する可能性がありますか? – Pravy

+0

これは動作し、あなたは男です。ありがとう! –

0

WebViewをURLで開く代わりに使用することをお勧めします。

私は、answerにtwitterをうまく実装するための手順を説明しました。

+0

こんにちは、ありがとうございました。私はすでにあなたの答えを他のスレッドで読んでいました。私がAndroidに慣れていないので、あなたが言いたい4点以上を必要としています。コード例がうまくいくでしょう。 –

1

onNewIntentを正しく呼び出すには、AndroidManifest.xmlファイルのアクティビティでlauchMode="singleInstance"または"singleTop"を指定する必要があります。

関連する問題