Я пытаюсь реализовать приложение, которое использует WebView для отображения веб-сайта, который имеет форму внутри. Проблема заключается в том, что когда пользователь заполняет форму и перед нажатием кнопки «Отправить», соединение с Интернетом теряется. В этом случае я получаю onErrorReceived обратного вызова, и вот моя реализация:Повторно отправить форму, когда соединение потеряно в Android
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
mDisconnected = true;
mDisconnectUrl = failingUrl;
mWebView = view;
mWebView.saveState(mWebViewState);
}
Поэтому я стараюсь, чтобы сохранить содержание формы здесь и неисправное URL, так что я могу продолжать посылать его, когда соединение установлено снова. Так что у меня есть другой поток пытается сделать новый сокет соединение с сервером, и в случае успеха, я вызываю функцию в моем WebViewClient классе переподключение():
void reconnect(Context appContext) {
if (mDisconnected) {
try {
((Activity) appContext).runOnUiThread(new Runnable() {
public void run() {
mWebView.reload();
mWebView.restoreState(mWebViewState);
}
});
} catch (Exception e) {
mWebView.goBack();
}
mDisconnected = false;
}
}
Так что я пытаюсь сделать перезарядку и восстановить чтобы WebView мог продолжить свою операцию отправки. Проблема заключается в том, что страница снова загружается, все данные, введенные в форму, теряются, и она не продолжается с помощью операции «Отправить», которая уже была нажата до того, как соединение будет потеряно. Есть ли какая-нибудь идея, как решить эту проблему.
Данные очень чувствительны, поэтому важно продолжить отправку. Также можно позволить пользователю снова заполнить форму и отправить ее снова, но в этом случае она не нужна.
EDIT: Возможно, вопрос может быть упрощен. Есть ли какая-либо функция или способ обновления веб-сайта в WebViewClient, который продолжается там, где он остался, и извлекает данные формы в состояние до возникновения проблемы.
Вы можете указать код, который отправляет данные? – Snippet
делает 'shouldInterceptRequest (представление WebView, строковый url)' дает вам URL-адрес, который необходимо получить? Или, может быть, 'shouldOverrideUrlLoading (представление WebView, String url)' ... Если ни одна из них не помогает, возможно, она отправляет действие dontResend из 'onFormResubmission (представление WebView, Message dontResend, Message resend)'? – 18446744073709551615
@Snippet: Что вы понимаете под кодом, который передает данные. Это веб-сайт, это может быть любой веб-сайт, у меня нет кода. Мне также не разрешено использовать java-скрипт. –