2

WebView を使用して、内部にフォームがある Web サイトを表示するアプリを実装しようとしています。問題は、ユーザーがフォームに入力し、[送信] ボタンが押される直前に、インターネット接続が失われることです。この場合、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 で Web サイトを更新する機能または方法はありますか。これは、残っていた場所から続行し、問題が発生する前の状態にフォーム データを取得します。

4

1 に答える 1

1

データベースを使用してフォームの内容を保存し、サービスを介してデータを送信します。送信が成功したら、データベースの内容を削除します。

于 2013-03-05T11:14:35.697 に答える