與此處相同標題的其他問題不同,PhoneGap/Android應用工作正常,並且加載視圖和外部鏈接的JavaScript文件除了嘗試從Java端調用JavaScript方法。我打電話的方法,像這樣:當試圖在WebView中調用JavaScript時,「連接到服務器失敗」
public void update(final String data) {
appView.post(new Runnable(){
@Override
public void run(){
loadUrl("javascript: dispatch('" + data + "')");
}
});
}
而且update
被稱爲在非UI線程。
問題是我打電話給javascript方法,功能運行正常,並且做了我所期望的,但幾秒鐘後,應用程序崩潰,出現錯誤消息「連接到服務器失敗」以及我所調用的方法的名稱。我嘗試增加其他問題中建議的超時時間,但在超時結束時它仍然崩潰。
順便提一句,我也收到一條關於從非UI線程調用的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
呼籲在UI線程中發生。顯然情況並非如此?
編輯:
問題解決了。爲了記錄,我將loadURL
行更改爲:
sendJavascript("dispatch('" + data + "')");
它正常工作。
我不擴展插件,所以我不認爲這會有所幫助。 – jyurek 2012-03-26 20:08:12
您可能需要重構一下代碼,使其成爲一個插件,因爲它會使JS更加方便地進行本地通信。 – 2012-03-27 13:27:46
事實證明,隨着更多的谷歌搜索,其他人也推薦sendJavascript。我以爲我以正確的方式發送了這個消息,但事實證明,我並沒有這麼做。 Eclipse在抱怨我如何使用它。似乎有關於這種方法的寶貴的小文檔,儘管它顯然是正確的使用方法。 – jyurek 2012-03-27 13:38:05