我想在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();
}
}
}
答案 0 :(得分:0)
尝试将登录结果传递给asyncTask的onPostExecute
方法,并在那里执行webview更改。但只是为了确定,请发布一个堆栈跟踪。
答案 1 :(得分:0)
您只能在setContentView(...);
中拨打onCreate()
一次您无法进行的操作。 WebView
必须:
成为原始布局的一部分。您可以将其可见性设置为最初,然后在需要时显示
或者您可以通过编程方式创建WebView
,并在需要时立即将其添加到视图层次结构中。
或者,您可以创建一个仅包含Activity
的新WebView
,并在您想要显示网站时将网址传递给新的Activity
。
第一个和第三个选项是首选。