2012-03-26 46 views
2

與此處相同標題的其他問題不同,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 + "')"); 

它正常工作。

回答

2

你最好打電話:

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

如果您的Java類的擴展插件。

+0

我不擴展插件,所以我不認爲這會有所幫助。 – jyurek 2012-03-26 20:08:12

+0

您可能需要重構一下代碼,使其成爲一個插件,因爲它會使JS更加方便地進行本地通信。 – 2012-03-27 13:27:46

+0

事實證明,隨着更多的谷歌搜索,其他人也推薦sendJavascript。我以爲我以正確的方式發送了這個消息,但事實證明,我並沒有這麼做。 Eclipse在抱怨我如何使用它。似乎有關於這種方法的寶貴的小文檔,儘管它顯然是正確的使用方法。 – jyurek 2012-03-27 13:38:05

1

你需要添加一個URL超時。它是一個在android中的bug。

修改它像這樣

public void update(final String data) { 
    super.setIntegerProperty("loadUrlTimeoutValue", 60000); 
    super.loadUrl("javascript: dispatch('" + data + "')"); 
} 
+0

不,這似乎沒有幫助。無論我改變超時到那裏,它只是等待那麼久,然後用相同的錯誤信息退出。 – jyurek 2012-03-26 19:22:43

+0

嘗試增加超時到一些東西像120000,並檢查.... – 2012-03-26 19:25:50

+0

@jyurek刪除appView.post並直接運行它沒有任何線程...我已編輯我的帖子 – 2012-03-26 19:33:11

相關問題