在Android中丢失连接时重新提交表单

时间:2013-03-05 11:12:29

标签: android forms webview form-submit

我正在尝试实现一个应用程序,该应用程序使用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中的网站,该网站将继续存在,并在问题发生之前将表单数据检索到状态。

1 个答案:

答案 0 :(得分:1)

使用数据库存储表单内容,然后通过服务发送数据。 成功提交后删除数据库的内容。