我正在尝试实现一个应用程序,它使用 WebView 来显示一个内部有表单的网站。问题是,当用户填写表单并在按下发送按钮之前,互联网连接丢失。在这种情况下,我收到 onErrorReceived 回调,这是我的实现:
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
mDisconnected = true;
mDisconnectUrl = failingUrl;
mWebView = view;
mWebView.saveState(mWebViewState);
}
所以我尝试在这里存储表单的内容和失败的 url,这样当连接再次建立时我可以继续发送它。所以我有另一个线程试图与服务器建立一个新的 Socket 连接,当它成功时,我在我的 WebViewClient 类 reconnect() 中调用一个函数:
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 可以继续其发送操作。问题是再次加载页面时,表单中输入的所有数据都丢失了,并且无法继续进行发送操作,在连接丢失之前已经单击了该操作。有任何想法,如何解决这个问题。
数据非常敏感,因此继续发送很重要。也可以让用户再次填写表单并再次发送,但在这种情况下不希望这样做。
编辑: 也许这个问题可以简化。是否有任何功能或方法可以在 WebViewClient 中刷新网站,该网站会从其离开的位置继续并将表单数据检索到问题发生之前的状态。