2013-03-05 59 views
2

我試圖實現一個應用程序,該應用程序使用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的內容,這樣我就可以繼續發送它時,連接重新建立。所以,我有另一個線程試圖與服務器的新的Socket連接,當它成功,我調用一個函數在我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可以繼續其發送操作。問題是當頁面再次加載時,表單中輸入的所有數據都會丟失,並且不會繼續執行發送操作,在連接丟失之前,發送操作已經被點擊。有任何想法,如何解決這個問題。

數據非常敏感,所以繼續發送很重要。也可以讓用戶再次填寫表單並再次發送,但在這種情況下不需要。

編輯: 也許問題可以簡化。是否有任何功能或方法來刷新WebViewClient中的網站,該網站將繼續保留它的位置,並在發生問題之前將表單數據檢索到狀態。

+0

你能提供提交數據的代碼嗎? – Snippet 2013-03-05 11:22:41

+0

'shouldInterceptRequest(WebView視圖,字符串url)'給你必須檢索的URL?或者,也許'shouldOverrideUrlLoading(WebView視圖,字符串url)'...如果都沒有幫助,也許它是從'onFormResubmission(WebView視圖,Message dontResend,Message resend)'發送dontResend動作? – 18446744073709551615 2013-03-05 11:56:34

+0

@Snippet:你提交數據的代碼是什麼意思。這是網站,它可以是任何網站,我沒有代碼。我也不允許使用java腳本注入。 – 2013-03-05 12:37:42

回答

1

使用數據庫來存儲表單的內容,然後通過服務發送數據。 成功提交時刪除數據庫的內容。

+0

你能更具體一些,並舉一些例子嗎? – 2013-03-05 12:40:46

+0

如果您對sqlite有任何想法,請使用該數據庫來存儲表單的內容。現在創建一個運行所有時間的服務。在這個服務中創建一個方法來檢查數據庫是否有一些數據。如果是,那麼通過多部分實體和httpPost發送數據。並且在響應爲200時截斷表格。對不起,我沒有任何示例顯示。 – Payal 2013-03-05 12:42:43

+0

我不知道關於sqlite,但它可以保存表單數據而不知道任何關於網站代碼。該網站可以是我的客戶創建的任何網站。我不知道所有的源代碼。 – 2013-03-05 12:47:02

相關問題