打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
在android中,Twitter4j API没有重定向到按下按钮的应用程序

我在android中使用Twitter4j API,当我从twitter浏览器屏幕按回按钮取消授权时,它将我带回到PrepareRequestTokenActivity的onResume()(twitter4j api提供的活动),我正在从onResume完成此活动,但是当授权是成功的,然后它也会转到onResume()然后转到相同活动的onNewIntent()方法,但是活动从恢复完成并且身份验证失败.有没有办法从twitter浏览器屏幕捕获后退按钮?以下是活动.

public class PrepareRequestTokenActivity extends Activity {        public static final String CONSUMER_KEY = "Hr8aDOFeDdY9UbvQB0w2w";        public static final String CONSUMER_SECRET= "wfZOJYkYVEYrmdmltOaKfRdnUfSiUkr2MQdjRUY2xU";        public static final String REQUEST_URL = "http://twitter.com/oauth/request_token"; //"https://api.twitter.com/oauth/request_token"        public static final String ACCESS_URL = "http://twitter.com/oauth/authorize"; //"https://api.twitter.com/oauth/authorize"        public static final String AUTHORIZE_URL = "http://twitter.com/oauth/access_token"; //"https://api.twitter.com/oauth/access_token"        final public static String OAUTH_CALLBACK_SCHEME = "droidnotify-oauth-twitter";        final public static String OAUTH_CALLBACK_URL = OAUTH_CALLBACK_SCHEME   "://callback";        private boolean _debug = false;    private OAuthConsumer _consumer;     private OAuthProvider _provider;        @Override        public void onCreate(Bundle savedInstanceState) {                super.onCreate(savedInstanceState);                _debug = Log.getDebug();                if (_debug) Log.v("PrepareRequestTokenActivity.onCreate()");        try {                _consumer = new CommonsHttpOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);            //_provider = new CommonsHttpOAuthProvider(REQUEST_URL, ACCESS_URL, AUTHORIZE_URL);            _provider = new DefaultOAuthProvider(REQUEST_URL, ACCESS_URL, AUTHORIZE_URL);        } catch (Exception ex) {                if (_debug) Log.e("PrepareRequestTokenActivity.onCreate() Error creating consumer / provider: "   ex.toString());                }        if (_debug) Log.v("PrepareRequestTokenActivity.onCreate() Starting task to retrieve request token.");                new OAuthRequestTokenTask(this, _consumer, _provider).execute();        }        @Override        public void onNewIntent(Intent intent) {                super.onNewIntent(intent);                 if (_debug) Log.v("PrepareRequestTokenActivity.onNewIntent()");                SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);                final Uri uri = intent.getData();                if (uri != null && uri.getScheme().equals(OAUTH_CALLBACK_SCHEME)) {                        if (_debug) Log.v("PrepareRequestTokenActivity.onNewIntent() Callback received : "   uri);                        if (_debug) Log.v("PrepareRequestTokenActivity.onNewIntent() Retrieving Access Token");                        new RetrieveAccessTokenTask(this, _consumer, _provider, prefs).execute(uri);                        finish();                       }        }        public class RetrieveAccessTokenTask extends AsyncTask<Uri, Void, Void> {                private Context _context;                private OAuthProvider _provider;                private OAuthConsumer _consumer;                private SharedPreferences _prefs;                public RetrieveAccessTokenTask(Context context, OAuthConsumer consumer,OAuthProvider provider, SharedPreferences prefs) {                        _context = context;                        _consumer = consumer;                        _provider = provider;                        _prefs=prefs;                }                @Override                protected Void doInBackground(Uri...params) {                        final Uri uri = params[0];                        final String oauth_verifier = uri.getQueryParameter(OAuth.OAUTH_VERIFIER);                        try {                                _provider.retrieveAccessToken(_consumer, oauth_verifier);                                final Editor edit = _prefs.edit();                                edit.putString(OAuth.OAUTH_TOKEN, _consumer.getToken());                                edit.putString(OAuth.OAUTH_TOKEN_SECRET, _consumer.getTokenSecret());                                edit.commit();                                String token = _prefs.getString(OAuth.OAUTH_TOKEN, "");                                String secret = _prefs.getString(OAuth.OAUTH_TOKEN_SECRET, "");                                _consumer.setTokenWithSecret(token, secret);                                //_context.startActivity(new Intent(_context, AndroidTwitterSample.class));                                //executeAfterAccessTokenRetrieval();                                Toast.makeText(_context, "Twitter Authentication Successfull", Toast.LENGTH_LONG);                                Toast.makeText(_context, "OAuth.OAUTH_TOKEN KEY: "   OAuth.OAUTH_TOKEN   ", OAuth.OAUTH_TOKEN Value: "   _consumer.getToken(), Toast.LENGTH_LONG);                                Toast.makeText(_context, "OAuth.OAUTH_TOKEN_SECRET KEY: "   OAuth.OAUTH_TOKEN_SECRET   ", OAuth.OAUTH_TOKEN_SECRET Value: "   _consumer.getTokenSecret(), Toast.LENGTH_LONG);                                if (_debug) Log.v("OAuth - Access Token Retrieved");                        } catch (Exception ex) {                                if (_debug) Log.e("OAuth - Access Token Retrieval Error: "   ex.toString());                        }                        return null;                }        }       }

解决方法:

只需将一个布尔标志初始化为false,使其在PrepareRequestTokenActivity的onNewIntent()函数中为true,并在onResume函数中添加一个if条件,如果此标志为false则完成活动,如果为true则不执行任何操作,即单击后退按钮时从浏览器它直接转到onResume,此时你的标志将是假的,然后这个活动将完成,当成功或不,谢谢它将首先转到onNewIntent()然后onResume,所以是真的然后活动将不会完成

来源:https://www.icode9.com/content-1-282501.html
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Facebook登陆服务器校验,权限请求以及数据获取
微信企业号开发步骤
php实现新浪、腾讯、淘宝登陆的代码
OAuth 2.0 - Authorization Code授权方式详解
淘宝开放平台
微信支付之openid获取
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服