2013-03-05 2 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, так что я могу продолжать посылать его, когда соединение установлено снова. Так что у меня есть другой поток пытается сделать новый сокет соединение с сервером, и в случае успеха, я вызываю функцию в моем 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 мог продолжить свою операцию отправки. Проблема заключается в том, что страница снова загружается, все данные, введенные в форму, теряются, и она не продолжается с помощью операции «Отправить», которая уже была нажата до того, как соединение будет потеряно. Есть ли какая-нибудь идея, как решить эту проблему.

Данные очень чувствительны, поэтому важно продолжить отправку. Также можно позволить пользователю снова заполнить форму и отправить ее снова, но в этом случае она не нужна.

EDIT: Возможно, вопрос может быть упрощен. Есть ли какая-либо функция или способ обновления веб-сайта в WebViewClient, который продолжается там, где он остался, и извлекает данные формы в состояние до возникновения проблемы.

+0

Вы можете указать код, который отправляет данные? – Snippet

+0

делает 'shouldInterceptRequest (представление WebView, строковый url)' дает вам URL-адрес, который необходимо получить? Или, может быть, 'shouldOverrideUrlLoading (представление WebView, String url)' ... Если ни одна из них не помогает, возможно, она отправляет действие dontResend из 'onFormResubmission (представление WebView, Message dontResend, Message resend)'? – 18446744073709551615

+0

@Snippet: Что вы понимаете под кодом, который передает данные. Это веб-сайт, это может быть любой веб-сайт, у меня нет кода. Мне также не разрешено использовать java-скрипт. –

ответ

1

Используйте базу данных для хранения содержимого формы, а затем отправьте данные через службу. Удалите содержимое базы данных при успешном представлении.

+0

Можете ли вы уточнить некоторые примеры? –

+0

Если у вас есть какие-либо идеи о том, как sqlite использует эту базу данных для хранения содержимого формы. Теперь создайте службу, которая работает все время. В этой службе создается метод, который проверяет, есть ли в базе данных какие-либо данные. Если да, то отправляйте данные через multipart entity и httpPost. И усечь таблицу, как только ответ будет равен 200. Извините, у меня нет никакого примера для показа. – Payal

+0

Я понятия не имею о sqlite, но можно ли сохранить данные формы, ничего не зная о коде сайта. Веб-сайт может быть любым веб-сайтом, созданным моим клиентом. Я не могу знать исходный код для всех. –

Смежные вопросы