我正在尝试实现一个应用程序,该应用程序使用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中的网站,该网站将继续存在,并在问题发生之前将表单数据检索到状态。
答案 0 :(得分:1)
使用数据库存储表单内容,然后通过服务发送数据。 成功提交后删除数据库的内容。