0

在此处输入图像描述

这是 twitter 登录的第一页,当我点击取消并返回应用程序时, 我的应用程序被强制关闭。M 为此使用 Twitter4J 请建议我有什么问题。

M 使用此代码。

void OAuthLogin() {
        try {

            twitter = new TwitterFactory().getInstance();
            twitter.setOAuthConsumer(consumerKey, consumerSecret);
            requestToken = twitter.getOAuthRequestToken(CALLBACKURL);
            String authUrl = requestToken.getAuthenticationURL();
            this.startActivity(new Intent(Intent.ACTION_VIEW, Uri
                    .parse(authUrl)));
        } catch (TwitterException ex) {
        Log.e("in Main.OAuthLogin", ex.getMessage());
        }
    }


@Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        Uri uri = intent.getData();
        if (uri != null && uri.toString().contains(CALLBACKURL)) {
            try {
                String verifier = uri.getQueryParameter("oauth_verifier");
                AccessToken accessToken = twitter.getOAuthAccessToken(
                        requestToken, verifier);
                String token = accessToken.getToken(), secret = accessToken
                        .getTokenSecret();
                twitter.setOAuthAccessToken(token, secret);

                twitter.updateStatus(base_link_url);
            this.displayTimeLine(token, secret); // after everything,
            } catch (TwitterException ex) {
                                }
        }
    }

我的清单文件:M 将此代码用于我的班级

<activity android:name=".Test" android:configChanges="keyboard|keyboardHidden|orientation"
            android:screenOrientation="portrait" android:label="@string/app_name"
            android:launchMode="singleTask" android:theme="@android:style/Theme.NoTitleBar">
            <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="gauravmusic" android:host="twitt" />
            </intent-filter>
        </activity>

我的回调网址:我在我的代码中使用

private final String CALLBACKURL = "gauravmusic://twitt";

现在建议我哪里出错了。

经过研究我发现,

            if (uri != null && uri.toString().contains(CALLBACKURL))
{

}

如果我将此条件更改为

if (uri != null && uri.getScheme().toString().contains(CALLBACKURL_SCHEME)) {
}

取消,并返回应用程序现在可以正常工作,但现在我无法在我的墙上发布推文。我像这样把两个条件加在一起

   if (uri != null && uri.getScheme().toString().contains(CALLBACKURL_SCHEME) || uri.toString().contains(CALLBACKURL)) {

}

它也不起作用..请建议我。

嗨,我找到了答案。我发现一种模式,当单击取消并返回到应用程序 链接时,会执行此代码。在这种情况下,我们没有登录,所以我们无法找到 String Verifier 的值,并且它给出了 NullPointer 异常。

if (uri != null && uri.toString().contains(CALLBACKURL)) {
            try {
                String verifier = uri.getQueryParameter("oauth_verifier");
                AccessToken accessToken = twitter.getOAuthAccessToken(
                        requestToken, verifier);
                String token = accessToken.getToken(), secret = accessToken
                        .getTokenSecret();
                twitter.setOAuthAccessToken(token, secret);

                twitter.updateStatus(base_link_url);
            this.displayTimeLine(token, secret); // after everything,
            } catch (TwitterException ex) {
                                }
        } 

我将此行更改为

if (uri != null && uri.getScheme().toString().contains(CALLBACKURL_SCHEME)&& !uri.toString().contains("denied"))

经过一番研究,我发现当我们点击取消并返回应用程序链接时,它的 uri 是这样的

DEBUG/URI!!!!!!!!!!!!!!!!!!!!!(5174): gauravmusic://twittdenied=FjgW7QQYpFDI03sDvIc5I1w6w2Xv67TFI9sKW1OyA

当我们成功登录时,Uri 就是这样

08-17 10:31:19.182: DEBUG/URI(5278): gauravmusic://twitt?oauth_token=pm0E10vayzTViLGQpGZwwpIKhQ9aqwLrEBggiJ7vvPY&oauth_verifier=cHiWkuiQfygmlPeC7B6fNbiqv34gkPIdWctlavzGo80

然后我添加条件

!uri.toString().contains("denied") (bcz 当我们没有登录时 uri 包含一个单词 "denied")

它对我来说很好。现在,当我单击取消并返回到应用程序 时,它不会到达此行或此循环。
字符串验证器 = uri.getQueryParameter("oauth_verifier");

现在一切正常。建议我是否有更好的想法来处理这个问题。我不想依赖 Uri 的“拒绝”字眼。

4

1 回答 1

1

检查此链接以了解 Android 应用程序中的 Twitter 集成。

它工作得很好而且很完美。

确保您在应用程序设置页面的字段回调 URL 中提供了一些虚拟回调。

将 Twitter 集成到 Android 应用程序中

编辑 :

我猜到我们的代码中发生了什么,如果您从授权中取消应用程序,那么下面的验证器将没有价值

String verifier = uri.getQueryParameter("oauth_verifier");

由于没有值,它会抛出NULL POINTER EXCEPTION并且它会从TryCatch块,因此

 twitter.updateStatus(base_link_url);

不会达到

所以这条推文没有发布。

如果您需要检查此添加日志Catch 块,以便您可以看到发生了什么。`

于 2011-08-12T12:37:46.290 回答