我試圖實現一個應用程序,該應用程序使用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中的網站,該網站將繼續保留它的位置,並在發生問題之前將表單數據檢索到狀態。
你能提供提交數據的代碼嗎? – Snippet 2013-03-05 11:22:41
'shouldInterceptRequest(WebView視圖,字符串url)'給你必須檢索的URL?或者,也許'shouldOverrideUrlLoading(WebView視圖,字符串url)'...如果都沒有幫助,也許它是從'onFormResubmission(WebView視圖,Message dontResend,Message resend)'發送dontResend動作? – 18446744073709551615 2013-03-05 11:56:34
@Snippet:你提交數據的代碼是什麼意思。這是網站,它可以是任何網站,我沒有代碼。我也不允許使用java腳本注入。 – 2013-03-05 12:37:42