当试图在WebView中调用JavaScript时,“连接到服务器失败”
与此处相同标题的其他问题不同,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 + "')");
它正常工作。
你最好打电话:
this.sendJavaScript("dispatch(('" + data + "')");
如果您的Java类的扩展插件。
你需要添加一个URL超时。它是一个在android中的bug。
修改它像这样
public void update(final String data) {
super.setIntegerProperty("loadUrlTimeoutValue", 60000);
super.loadUrl("javascript: dispatch('" + data + "')");
}
不,这似乎没有帮助。无论我改变超时到那里,它只是等待那么久,然后用相同的错误信息退出。 – jyurek 2012-03-26 19:22:43
尝试增加超时到一些东西像120000,并检查.... – 2012-03-26 19:25:50
@jyurek删除appView.post并直接运行它没有任何线程...我已编辑我的帖子 – 2012-03-26 19:33:11
我不扩展插件,所以我不认为这会有所帮助。 – jyurek 2012-03-26 20:08:12
您可能需要重构一下代码,使其成为一个插件,因为它会使JS更加方便地进行本地通信。 – 2012-03-27 13:27:46
事实证明,随着更多的谷歌搜索,其他人也推荐sendJavascript。我以为我以正确的方式发送了这个消息,但事实证明,我并没有这么做。 Eclipse在抱怨我如何使用它。似乎有关于这种方法的宝贵的小文档,尽管它显然是正确的使用方法。 – jyurek 2012-03-27 13:38:05