如何在android的asynctask中显示webview?

时间:2014-07-24 11:54:02

标签: android twitter webview android-asynctask

我想在android中的asynctask中显示一个webview。我正在尝试授权我的twitter应用程序。但是,当我点击Login按钮时,它会将我重定向到浏览器。所以,我想在我的活动上显示一个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();
            }
        }
    }

2 个答案:

答案 0 :(得分:0)

尝试将登录结果传递给asyncTask的onPostExecute方法,并在那里执行webview更改。但只是为了确定,请发布一个堆栈跟踪。

答案 1 :(得分:0)

您只能在setContentView(...);中拨打onCreate()一次您无法进行的操作。 WebView必须:

  • 成为原始布局的一部分。您可以将其可见性设置为最初,然后在需要时显示

  • 或者您可以通过编程方式创建WebView,并在需要时立即将其添加到视图层次结构中。

  • 或者,您可以创建一个仅包含Activity的新WebView,并在您想要显示网站时将网址传递给新的Activity

第一个和第三个选项是首选。