我制作了一个使用基本身份验证向服务器进行身份验证的应用程序。但是我无法清除凭据,因此这意味着我有两个未解决的问题:
- 用户在不退出程序的情况下无法注销
- 如果用户输入的凭据错误,他们必须退出并重新进入程序
我自己尝试了很多不同的实现,并且在这个网站上推荐了很多。我在 freenode 上露营 #android-dev 无济于事。所以这是我最后的选择。
这是我的 WebView 示例代码(我取出了一些东西,但主要代码基本相同):
wv = new WebView(getBaseContext());
wv.setWebViewClient(new WebViewClient() {
boolean error = false;
int count = 0;
int checked = 0;
@Override
public void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm) {
count++;
if (count >= 3) {
Toast.makeText(getBaseContext(), "Login Failed. Please Try Again.", Toast.LENGTH_LONG).show();
} else {
handler.proceed(getUser(), getPass());
}// end else
}// end onReceivedHttpAuthRequest
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
}// onPageStarted
// on success switch activities
@Override
public void onPageFinished(WebView view, String url) {
if (view.getTitle().equalsIgnoreCase("fooTitle")) {
// switch activities
Intent fooActivity = new Intent(getBaseContext(), fooActivity.class);
startActivity(fooActivity);
} else {
//failed
}// end else
}// end onPageFinished
});// end setWebViewCleint
wv.getSettings().setJavaScriptEnabled(true);
wv.loadUrl(url);
只有在我第一次运行它时它才会运行 onReceivedHttpAuthRequest。如果我注销并重新登录,它将使用以前的凭据运行 onPageStarted 然后 onPageFinished。因此,如果我注销并输入新用户,我将使用原始用户重新登录。或者,如果我输入了错误的用户名和密码,它只会挂在 OnPageStarted 上。我试过使用 onReceivedError 和 http 错误之一也没有任何好处。
这是我尝试使用 logout() 方法以及代码的其他部分中的一些代码。我也尝试了许多不同的变体:
wv.clearCache(true);
wv.setHttpAuthUsernamePassword(host, realm, "","");
clearCacheFolder(this.getCacheDir());
clearCacheFolder(this.getExternalCacheDir());
this.getBaseContext().deleteDatabase("webview.db");
this.getBaseContext().deleteDatabase("webviewCache.db");
WebViewDatabase.getInstance(getBaseContext()).clearHttpAuthUsernamePassword();
WebViewDatabase.getInstance(getBaseContext()).clearUsernamePassword();
WebViewDatabase.getInstance(getBaseContext()).clearFormData();
WebStorage.getInstance().deleteAllData();
wv.setHttpAuthUsernamePassword(host, realm,
username, password);
ClearCacheFolder 指的是这里贴出的方法markjan:Android Webview - Completely Clear the Cache