В отличие от других вопросов с таким же названием, приложение PhoneGap / Android работает нормально и загружает представления и внешне связанные файлы javascript, КРОМЕ ТОГО, когда я пытаюсь вызвать метод javascript со стороны Java. Я вызываю метод так:
public void update(final String data) {
appView.post(new Runnable(){
@Override
public void run(){
loadUrl("javascript: dispatch('" + data + "')");
}
});
}
И update
вызывается в потоке без пользовательского интерфейса.
Дело в том, что я вызываю метод javascript, и функциональность запускается, работает нормально и выполняет то, что я ожидаю, но через несколько секунд приложение вылетает с сообщением об ошибке «Соединение с сервером было неудачным» и название метода, который я назвал. Я попытался увеличить время ожидания, как было предложено в других вопросах, но оно по-прежнему падает в конце времени ожидания.
Кстати, я также получаю предупреждение о том, что метод WebView вызывается из потока, не являющегося пользовательским интерфейсом, поэтому я добавил вызов post
, так что я не уверен, почему это происходит, но это происходит прямо перед ошибка тайм-аута в журнале, так может это связано?
Редактировать :
Я получаю эту ошибку в журнале, когда происходит сбой.
03-26 15:21:38.671: W/webview(3159): java.lang.Throwable: Warning: A WebView method was called on thread 'Thread-206'. All WebView methods must be called on the UI thread. Future versions of WebView may not support use on other threads.
03-26 15:21:38.671: W/webview(3159): at android.webkit.WebView.checkThread(WebView.java:9468)
03-26 15:21:38.671: W/webview(3159): at android.webkit.WebView.stopLoading(WebView.java:2253)
03-26 15:21:38.671: W/webview(3159): at org.apache.cordova.DroidGap$1$1.run(DroidGap.java:549)
03-26 15:21:38.671: W/webview(3159): at java.lang.Thread.run(Thread.java:856)
03-26 15:21:38.675: E/DroidGap(3159): DroidGap: TIMEOUT ERROR! - calling webViewClient
Мне сказали, что appView.post
этого избежать, потому что это вызовет вызов loadUrl
в потоке пользовательского интерфейса. Видимо, это не так?
EDIT :
Проблема решена. Для записи я изменил строку loadURL
на эту:
sendJavascript("dispatch('" + data + "')");
И это работает.