【问题标题】:android - twitter: callback is received but not shownandroid - twitter:收到回调但未显示
【发布时间】:2013-01-08 23:34:16
【问题描述】:

我花了 4 天时间来弄清楚为什么我的应用没有按预期运行。

我的应用想要在 twitter 上使用 OAuth(正在运行),并且在回调时它应该输入 onNewIntent 方法。它没有这样做,我不知道为什么。

因此,单击 twitter 按钮会打开一个网页,我可以在其中输入我的凭据。然后我得到一个屏幕,说明它成功并且我将被重定向回我的应用程序。我确实回到了我的应用程序,但从未调用过 onNewIntent 方法。我在 onNewIntend 方法的开头放置了一个断点并启动了调试器。它并没有停止这种方法!它确实在其他方法中停止,因此它不能成为调试器。

在我的日志文件(包括在内)中,倒数第三行,你可以看到它正在开始一个新的意图。那么.....这是怎么回事?

谁能解释一下?我很困惑。

这是我在点击 twitter 按钮时触发的代码:

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)

【问题讨论】:

    标签: android twitter-oauth


    【解决方案1】:

    您必须在 onResume() 方法中从 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); 
                              }
    

    所以你从 twitter 获取数据,现在你开始了一个新的 Activity

    【讨论】:

    • 我也遇到了上述问题,我尝试了您的解决方案。我能够访问 twitter 两次然后我不能。同样的异常正在发生。Wat 可能是问题所在??
    【解决方案2】:

    要正确调用onNewIntent,您需要在AndroidManifest.xml 文件中为活动指定lauchMode="singleInstance""singleTop"

    【讨论】:

      【解决方案3】:

      我建议你使用 WebView 而不是在 url 中打开它。

      我已经给出了一个answer,描述了成功实现 twitter 的步骤。

      【讨论】:

      • 您好,感谢您的回答。我已经在另一个线程上阅读了您的答案。由于我是 Android 新手,我需要的不仅仅是您提到的 4 点才能使其正常工作。代码示例会很好。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多