twitter登录回调android应用程序

twitter登录回调android应用程序,android,twitter,login,callback,twitter4j,Android,Twitter,Login,Callback,Twitter4j,我正在尝试使用Twitter4j库从我的android应用程序登录twitter,但当调用回调时,它崩溃了。。。并显示此屏幕:页面不可争议 这是我的代码: public class TwitterLogin extends Activity { /** Called when the activity is first created. */ Twitter twitter; RequestToken requestToken; /*

我正在尝试使用Twitter4j库从我的android应用程序登录twitter,但当调用回调时,它崩溃了。。。并显示此屏幕:页面不可争议

这是我的代码:

        public class TwitterLogin extends Activity {
    /** Called when the activity is first created. */

    Twitter twitter;
    RequestToken requestToken;

    /*
    * Calls the OAuth login method as soon as its started
    */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    //      setContentView(R.layout.main);
            OAuthLogin();
        }

    /*
    * - Creates object of Twitter and sets consumerKey and consumerSecret
    * - Prepares the URL accordingly and opens the WebView for the user to provide sign-in details
    * - When user finishes signing-in, WebView opens your activity back
    */
        void OAuthLogin() {
            try {
                twitter = new TwitterFactory().getInstance();
                twitter.setOAuthConsumer(TwitterConstants.CONSUMER_KEY,TwitterConstants.CONSUMER_SECRET_KEY);
                requestToken = twitter.getOAuthRequestToken(TwitterConstants.CALLBACK_URL);
                Log.w("TwitterLogin requestToken callbackUrl: "+requestToken.toString());
    //          requestToken = twitter.getOAuthRequestToken(OAuth.OUT_OF_BAND);
    //          String pin = requestToken.getParameter(OAuth.OAUTH_VERIFIER);
                String authUrl = requestToken.getAuthenticationURL();
                Log.w("TwitterLogin requestToken authUrl: "+authUrl);
                this.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(authUrl)));
                Log.w("TwitterLogin despres del startActivity intent");
                } catch (TwitterException ex) {
                Toast.makeText(this, ex.getMessage(), Toast.LENGTH_LONG).show();
                Log.e("in Main.OAuthLogin", ex.getMessage());
            }
        }


    /*
    * - Called when WebView calls your activity back.(This happens when the user has finished signing in)
    * - Extracts the verifier from the URI received
    * - Extracts the token and secret from the URL
    */
        @Override
        protected void onNewIntent(Intent intent) {
            super.onNewIntent(intent);
            Log.w("TwitterLogin  dintre del onNewIntent");
            Uri uri = intent.getData();

            Log.w("TwitterLogin uri: "+uri.toString());

                if (uri != null && uri.toString().startsWith(TwitterConstants.CALLBACK_URL)){

                    try {
                        String verifier = uri.getQueryParameter("oauth_verifier");
                        Log.w("TwitterLogin","onNewIntent oauth_verifier: "+verifier);
                        AccessToken accessToken = twitter.getOAuthAccessToken(requestToken, verifier);
                        Log.w("TwitterLogin","onNewIntent accesToken: "+accessToken.toString());
                        String token = accessToken.getToken(), secret = accessToken.getTokenSecret();
                        displayTimeLine(token, secret); //after everything, display the first tweet

                    } catch (TwitterException ex) {
                        Log.e("Main.onNewIntent", "" + ex.getMessage());
                    }
                }

        }

    /*
    * Displays the timeline's first tweet in a Toast
    */

        @SuppressWarnings("deprecation")
        void displayTimeLine(String token, String secret) {
            if (null != token && null != secret) {
                List<Status> statuses = null;
                try {
                    twitter.setOAuthAccessToken(token, secret);
                    statuses = twitter.getFriendsTimeline();
                    Toast.makeText(this, statuses.get(0).getText(), Toast.LENGTH_LONG)
                    .show();
                } catch (Exception ex) {
                    Toast.makeText(this, "Error:" + ex.getMessage(),
                    Toast.LENGTH_LONG).show();
                    Log.d("Main.displayTimeline",""+ex.getMessage());
                }

            } else {
                Toast.makeText(this, "Not Verified", Toast.LENGTH_LONG).show();
            }
        }
    }
公共类TwitterLogin扩展活动{
/**在首次创建活动时调用*/
推特;
请求令牌请求令牌;
/*
*启动OAuth登录方法后立即调用该方法
*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//setContentView(R.layout.main);
OAuthLogin();
}
/*
*-创建Twitter对象并设置consumerKey和ConsumerCret
*-相应地准备URL,并打开WebView供用户提供登录详细信息
*-当用户完成登录后,WebView会重新打开您的活动
*/
void OAuthLogin(){
试一试{
twitter=new TwitterFactory().getInstance();
setOAuthConsumer(TwitterConstants.CONSUMER\u密钥,TwitterConstants.CONSUMER\u密钥);
requestToken=twitter.getOAuthRequestToken(TwitterConstants.CALLBACK\uURL);
w(“TwitterLogin requestToken callbackUrl:+requestToken.toString());
//requestToken=twitter.getOAuthRequestToken(OAuth.OUT\u OF_BAND);
//String pin=requestToken.getParameter(OAuth.OAuth_验证器);
字符串authUrl=requestToken.getAuthenticationURL();
w(“TwitterLogin requestToken authUrl:+authUrl”);
this.startActivity(新的Intent(Intent.ACTION_视图,Uri.parse(authUrl));
w(“TwitterLogin despres del startActivity intent”);
}捕获(TwitterException ex){
Toast.makeText(this,例如getMessage(),Toast.LENGTH_LONG.show();
Log.e(“在Main.OAuthLogin中”,例如getMessage());
}
}
/*
*-当WebView回调您的活动时调用。(当用户完成登录时发生此情况)
*-从接收到的URI中提取验证器
*-从URL中提取令牌和密码
*/
@凌驾
受保护的void onNewIntent(意图){
super.onNewIntent(意向);
w(“TwitterLogin dintre del onNewIntent”);
Uri=intent.getData();
w(“TwitterLogin uri:+uri.toString());
if(uri!=null&&uri.toString().startsWith(TwitterConstants.CALLBACK\uURL)){
试一试{
字符串验证器=uri.getQueryParameter(“oauth_验证器”);
Log.w(“TwitterLogin”,“onNewIntent oauth_验证器:”+验证器);
AccessToken AccessToken=twitter.getOAuthAccessToken(requestToken,验证器);
w(“TwitterLogin”,“onNewIntent accesToken:+accessToken.toString());
字符串token=accessToken.getToken(),secret=accessToken.getTokenSecret();
displayTimeLine(token,secret);//完成所有操作后,显示第一条tweet
}捕获(TwitterException ex){
Log.e(“Main.onNewIntent”,“ex.getMessage());
}
}
}
/*
*显示时间线在Toast中的第一条推文
*/
@抑制警告(“弃用”)
void displayTimeLine(字符串标记、字符串机密){
if(null!=令牌&&null!=机密){
列表状态=空;
试一试{
setOAuthAccessToken(token,secret);
status=twitter.getFriendsTimeline();
Toast.makeText(这个,statuses.get(0.getText(),Toast.LENGTH\u LONG)
.show();
}捕获(例外情况除外){
Toast.makeText(此“错误:+ex.getMessage(),
Toast.LENGTH_LONG).show();
Log.d(“Main.displayTimeline”,“ex.getMessage());
}
}否则{
Toast.makeText(这个“未验证”,Toast.LENGTH_LONG.show();
}
}
}
如果有人能帮我,我已经尝试登录Twitter两天了,我不知道如何解决这个问题


谢谢

在twitter上注册应用时,您是否提供了应用的回调URL

如果您提供了回调URL,那么在android客户端中使用相同的URL

因为您正在通过回调发出请求

requestToken=twitter.getOAuthRequestToken(TwitterConstants.CALLBACK\uURL)


然后服务器也会在成功登录twitter后回复回调。

当我在回调中的twitter dev上注册我的应用程序时,我放了一些url,然后在Android清单上写了:-scheme=“x-oauthflow-twitter”-host=“callback”是否正确?如果我这样做:requestToken=twitter.getOAuthRequestToken();它返回到我在twitter dev settings callback_url上编写的回调,它可以工作,但是如果我输入:requestToken=twitter.getOAuthRequestToken(TwitterConstants.callback_url);然后显示不可用的网页。。为什么?有必要放一些网络视图吗?我一个都没做!有人能帮我吗?