尝试清理一些过时的Twitter身份验证代码,我一直在使用较新版本的android,不再允许在ui线程上完成网络任务而不会崩溃应用程序。
我似乎通过坚持使用webview.loadurl()解决了一半问题。调用异步任务但是当onLoadResource()时,应用程序在进程的第二部分崩溃由webviewclient调用,只是无法弄清楚放置onLoadResource()的最佳方法是什么;在不破坏代码的情况下将方法转换为异步任务。
package com.testapp2.second.activities;
import com.testapp2.second.OTweetApplication;
import com.testapp2.second.R;
import android.app.Activity;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class AuthorizationActivity extends Activity {
private OTweetApplication app;
private WebView webView;
private WebViewClient webViewClient = new WebViewClient() {
@Override
public void onLoadResource(WebView view, String url) {
// the URL we're looking for looks like this:
// http://otweet.com/authenticated?oauth_token=1234567890qwertyuiop
Uri uri = Uri.parse(url);
if (uri.getHost().equals("otweet.com")) {
String token = uri.getQueryParameter("oauth_token");
if (null != token) {
webView.setVisibility(View.INVISIBLE);
app.authorized();
finish();
} else {
// tell user to try again
}
} else {
super.onLoadResource(view, url);
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
app = (OTweetApplication)getApplication();
setContentView(R.layout.authorization_view);
setUpViews();
}
@Override
protected void onResume() {
super.onResume();
new AuthInBg().execute();
}
private void setUpViews() {
webView = (WebView)findViewById(R.id.web_view);
webView.setWebViewClient(webViewClient);
}
private class AuthInBg extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... arg0) {
String authURL = app.beginAuthorization();
webView.loadUrl(authURL);
return null;
}
}
}
我应该将异步任务结果更改为OnLoadResource()的构造函数;方法或许?
答案 0 :(得分:2)
我认为您需要在runOnUIThread()
方法中加入webView.setVisibility(View.INVISIBLE);
行,它应该有效。
它应该是这样的:
runOnUiThread(new Runnable() {
public void run() {
webView.setVisibility(View.INVISIBLE);
}
});