【发布时间】:2011-08-14 13:24:32
【问题描述】:
我有一个“本机”登录屏幕,它设置了一个静态 cookie,然后这个活动从 LoginWebView 获取 cookie。 我在异步任务中执行此操作。 现在的问题是异步任务包含 3 个非常丑陋的 hack,这使得代码非常不可靠(这些 hack 在下面的代码中标出)。
问题是,您知道如何摆脱这些丑陋的黑客行为中的一个或多个吗?
Hack nr 1 - 这取自某人在此处发布的关于堆栈溢出的示例,cookie 需要等待一段时间才能真正工作并加载到 webview 中,我不知道为什么但没有它它就无法工作。不过这还不是最大的问题。
Hack nr 2 - 我不知道为什么,但是如果我想能够加载另一个页面,我必须首先加载我从中获取 cookie 的页面。加载后,我只需稍等片刻,然后加载另一个 url。有谁知道为什么? 如果我不这样做,webview 会识别出 cookie 存在但根本不会完成加载任何页面,它只会卡在加载中并且永远不会完成。
Hack nr 3 - 这只是为了补救 hack nr 2。
private class WebViewTask extends AsyncTask<Void, Void, Boolean> {
String cookieString1;
CookieManager cookieManager;
@Override
protected void onPreExecute() {
Cookie sessionCookie = LoginWebView.cookie1;
CookieSyncManager.createInstance(WebViewActivity.this);
cookieManager = CookieManager.getInstance();
cookieString1 = sessionCookie.getName() + "=" + sessionCookie.getValue() + "; " +
"domain=" + sessionCookie.getDomain();
CookieSyncManager.getInstance();
//cookieManager.removeSessionCookie();
super.onPreExecute();
}
protected Boolean doInBackground(Void... param) {
// HACK NR.1
SystemClock.sleep(600);
return false;
}
@Override
protected void onPostExecute(Boolean result) {
Log.v(TAG, "COOKIE SYNC 1: " + cookieString1);
Log.v(TAG, "COOKIE SYNC 1: " + domain);
cookieManager.setCookie(domain, cookieString1);
CookieSyncManager.getInstance().sync();
WebSettings webSettings = webView.getSettings();
webSettings.setSavePassword(true);
webSettings.setSaveFormData(true);
webSettings.setJavaScriptEnabled(true);
webSettings.setSupportZoom(false);
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Log.i(TAG, "Loading...");
view.loadUrl(url);
return true;
}
});
//HACK NR 2
webView.getSettings().setDefaultZoom(WebSettings.ZoomDensity.FAR);
webView.loadUrl(domain);
Log.v(TAG, "PROGRESS " + webView.getProgress());
button1.setChecked(true);
if(webView.getProgress() == 100) {
//HACK NR. 3
SystemClock.sleep(80);
webView.getSettings().setDefaultZoom(WebSettings.ZoomDensity.MEDIUM);
clickButtonOne();
}
}
}
【问题讨论】:
-
你真的必须使用 AsyncTask 吗?你不能只使用你的线程吗?
-
那是我第一次尝试,但还是同样的问题!
标签: android http cookies webview android-asynctask