【发布时间】:2013-12-22 08:30:37
【问题描述】:
我正在使用基于 webview 的应用程序,我在 webview 中呈现 url。该 URL 具有 HTTP 身份验证。
当我第一次启动 url 时,它的 onReceivedHttpAuthRequest() 被调用,我显示一个对话框让用户输入身份验证凭据,即身份验证用户名和密码。
@Override
public void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm) {
final WebView mView = view;
final HttpAuthHandler mHandler = handler;
final EditText usernameInput = new EditText(mActivity);
usernameInput.setHint("Username");
final EditText passwordInput = new EditText(mActivity);
passwordInput.setHint("Password");
passwordInput.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
LinearLayout ll = new LinearLayout(mActivity);
ll.setOrientation(LinearLayout.VERTICAL);
ll.addView(usernameInput);
ll.addView(passwordInput);
Builder authDialog = new AlertDialog
.Builder(mActivity)
.setTitle("Authentication")
.setView(ll)
.setCancelable(false)
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
mHandler.proceed(usernameInput.getText().toString(), passwordInput.getText().toString());
dialog.dismiss();
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
dialog.dismiss();
mView.stopLoading();
onLoadListener.onAuthCancel((MyWebView)mView, mTitleTextView);
}
});
if(view!=null)
authDialog.show();
}
在提交请求时进行顺利并加载 url。但是在我使用后退按钮(不在后台发送)退出应用程序后,如果我再次启动它并 tru 加载相同的 url,它会直接加载 url 而不会要求再次调用 onReceivedHttpAuthRequest() 的凭据。
我还在使用以下代码清除应用退出时的凭据:
WebViewDatabase webDB = WebViewDatabase.getInstance(BrowserActivity.this);
if(webDB!=null){
if(webDB.hasFormData())
webDB.clearFormData();
if(webDB.hasUsernamePassword())
webDB.clearUsernamePassword();
if(webDB.hasHttpAuthUsernamePassword())
webDB.clearHttpAuthUsernamePassword();
}
webView.clearCache(true);
我还要清除所有 webview 缓存、cookie 和应用程序的缓存目录和 webview 数据库:
BrowserActivity.this.deleteDatabase("webview.db");
BrowserActivity.this.deleteDatabase("webviewCache.db");
我不知道为什么会这样。有没有人可以帮助我解决这个问题。 至少在为什么不调用 onReceivedHttpAuthRequest() 的问题上?
【问题讨论】:
-
您确定清除保存的用户名/密码的代码正在执行吗?
-
是的,它被执行了。此外,当我强制停止应用程序然后启动时,它会要求身份验证。
-
好的,所以听起来只有当您使用后退按钮时不起作用?究竟什么时候运行清除数据库的代码?
-
1.清除 Webview 缓存。 2. 删除数据库。 3.清除cookies。 4.删除缓存目录
-
@Thushara,还没有,我现在已经更改了功能。但仍在寻找相同的东西。
标签: android webview android-webview basic-authentication webviewclient