如何在android的asynctask中显示webview?
我想在android中的asynctask中显示webview。我正在尝试授权我的twitter应用程序。但是,当我单击“登录”按钮时,它会将我重定向到浏览器。因此,我想在我的活动中显示webview。我编写了以下代码,但我的应用程序崩溃。 那么,我怎样才能做到这一点呢 我登录twitter帐户的代码-如何在android的asynctask中显示webview?,android,twitter,webview,android-asynctask,Android,Twitter,Webview,Android Asynctask,我想在android中的asynctask中显示webview。我正在尝试授权我的twitter应用程序。但是,当我单击“登录”按钮时,它会将我重定向到浏览器。因此,我想在我的活动中显示webview。我编写了以下代码,但我的应用程序崩溃。 那么,我怎样才能做到这一点呢 我登录twitter帐户的代码- private class TwitterLoginTask extends AsyncTask<Void, Void, Void> { @Override
private class TwitterLoginTask extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
// Check if already logged in
if (!isTwitterLoggedInAlready()) {
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.setOAuthConsumerKey(TWITTER_CONSUMER_KEY);
builder.setOAuthConsumerSecret(TWITTER_CONSUMER_SECRET);
Configuration configuration = builder.build();
TwitterFactory factory = new TwitterFactory(configuration);
twitter = factory.getInstance();
try {
requestToken = twitter.getOAuthRequestToken(TWITTER_CALLBACK_URL);
wv.loadUrl(requestToken.getAuthorizationURL());
setContentView(wv);
setContentView(R.layout.activity_main);
wv.setWebViewClient(new WebViewClient());
wv.loadUrl(requestToken.getAuthenticationURL());
wv.getSettings().setJavaScriptEnabled(true);
//redirects to browser
//MainActivity.this.startActivity(new Intent(Intent.ACTION_VIEW,Uri.parse(requestToken.getAuthenticationURL())));
} catch (TwitterException e) {
e.printStackTrace();
}
}
return null;
}
@Override
protected void onPostExecute(Void result) {
if (isTwitterLoggedInAlready()) {
// User already logged into twitter
Toast.makeText(MainActivity.this, "Already Logged into Twitter", Toast.LENGTH_LONG).show();
}
}
}
私有类TwitterLoginTask扩展异步任务{
@凌驾
受保护的Void doInBackground(Void…参数){
//检查是否已登录
如果(!IsTwitterLoggeDinReady()){
ConfigurationBuilder=新的ConfigurationBuilder();
setOAuthConsumerKey(TWITTER用户密钥);
setOAuthConsumerCret(TWITTER\u CONSUMER\u SECRET);
配置=builder.build();
TwitterFactory=新TwitterFactory(配置);
twitter=factory.getInstance();
试一试{
requestToken=twitter.getOAuthRequestToken(twitter\u回调\u URL);
loadUrl(requestToken.getAuthorizationURL());
setContentView(wv);
setContentView(R.layout.activity_main);
setWebViewClient(新的WebViewClient());
loadUrl(requestToken.getAuthenticationURL());
wv.getSettings().setJavaScriptEnabled(true);
//重定向到浏览器
//MainActivity.this.startActivity(新意图(Intent.ACTION_视图,Uri.parse(requestToken.getAuthenticationURL()));
}捕获(twitter异常){
e、 printStackTrace();
}
}
返回null;
}
@凌驾
受保护的void onPostExecute(void结果){
if(IsTwitterLoggedInready()){
//用户已登录twitter
Toast.makeText(MainActivity.this,“已登录Twitter”,Toast.LENGTH_LONG.show();
}
}
}
尝试将登录结果传递到asyncTask的onPostExecute
方法,并在那里执行webview更改。但为了确定,请发布stacktrace。您只能调用setContentView(…)代码>一次在onCreate()
您尝试执行的操作是不可能的。WebView
必须:
- 成为原始布局的一部分。您可以将其可见性设置为“开始”,然后在需要时显示它
- 或者,您可以通过编程方式创建
WebView
,并在需要时将其添加到视图层次结构中
- 或者,您可以创建一个新的
活动
,该活动只包含网络视图
,并在需要显示网站时将url传递给新的活动
第一种和第三种选择是比较可取的 您没有注意到setContentView(wv)代码>在doInBackground()
中?首先也是最重要的是,这就是问题所在;loadUrl(requestToken.getAuthenticationURL());wv.getSettings().setJavaScriptEnabled(true);setContentView(wv);在postExecute中,删除setContentView(R.layout.activity_main);现在它可以正常工作了。但在点击webview中的“授权应用程序”按钮后,会出现错误,因为“令牌null不适用于应用程序”这意味着什么…?@user3851588你读过我的答案了吗?您不能在onCreate()
之外调用setContentView()
,这样只会弄乱您的活动。