如何在android的asynctask中显示webview?

如何在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

我想在android中的asynctask中显示webview。我正在尝试授权我的twitter应用程序。但是,当我单击“登录”按钮时,它会将我重定向到浏览器。因此,我想在我的活动中显示webview。我编写了以下代码,但我的应用程序崩溃。 那么,我怎样才能做到这一点呢

我登录twitter帐户的代码-

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()
,这样只会弄乱您的
活动。