Я использую приложение на основе webview, где я просматриваю URL-адрес в веб-просмотре. Url имеет HTTP-аутентификацию.Android-WebView onReceivedHttpAuthRequest() не вызван снова
Когда я запускаю 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. Но после того, как я выхожу из приложения, используя кнопку «Назад» (не отправляя фоновый рисунок), если я снова запустил его и вернул для загрузки того же 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, куки и кэш-каталог приложения и базы данных WebView:
BrowserActivity.this.deleteDatabase("webview.db");
BrowserActivity.this.deleteDatabase("webviewCache.db");
Я не знаю, почему это происходит. Есть ли кто-нибудь, кто может мне помочь в этом. По крайней мере, на вопрос, почему onReceivedHttpAuthRequest() не называется?
Вы уверены, что код, который вы должны очистить сохраненным именем пользователя/паролем, выполняется? – ksasq
да, это выполнено. Также, когда я принудительно останавливаю приложение, а затем запускаю его, он запрашивает auth. – mohitum
Хорошо, значит, это звучит только в том случае, если вы не используете кнопку «Назад»? Когда именно вы запускаете код, который очищает базу данных? – ksasq