«Соединение с сервером было неудачным» при попытке вызвать javascript в WebView - PullRequest
2 голосов
/ 26 марта 2012

В отличие от других вопросов с таким же названием, приложение 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 + "')");

И это работает.

Ответы [ 2 ]

2 голосов
/ 26 марта 2012

Вам лучше позвонить:

this.sendJavaScript("dispatch(('" + data + "')");

если ваш класс Java расширяет плагин.

1 голос
/ 26 марта 2012

Вам нужно добавить тайм-аут URL .. Это ошибка в Android.

Изменить это так

public void update(final String data) {
    super.setIntegerProperty("loadUrlTimeoutValue", 60000);
    super.loadUrl("javascript: dispatch('" + data + "')");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...