&引用;与服务器的连接不成功";尝试在WebView中调用javascript时

&引用;与服务器的连接不成功";尝试在WebView中调用javascript时,javascript,android,cordova,Javascript,Android,Cordova,与这里的其他问题不同,PhoneGap/Android应用程序运行良好,可以加载视图和外部链接的javascript文件,除非我试图从Java端调用javascript方法。我这样调用该方法: public void update(final String data) { appView.post(new Runnable(){ @Override public void run(){ loadUrl("javascript: di

与这里的其他问题不同,PhoneGap/Android应用程序运行良好,可以加载视图和外部链接的javascript文件,除非我试图从Java端调用javascript方法。我这样调用该方法:

public void update(final String data) {
    appView.post(new Runnable(){
        @Override
        public void run(){
            loadUrl("javascript: dispatch('" + data + "')");
        }
    });
}
在非UI线程中调用
update

问题是,我正在调用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
会避免这种情况,因为它会导致在UI线程中发生
loadUrl
调用。显然不是这样

编辑

问题解决了。为了记录,我将
loadURL
行更改为:

sendJavascript("dispatch('" + data + "')");

你需要添加一个url超时。这是安卓系统的一个错误

像这样修改它

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

你最好打电话:

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

如果您的Java类正在扩展插件。

否,这似乎没有帮助。无论我将超时更改为什么,它都会等待那么长时间,然后退出,并显示相同的错误消息。@jyurek删除appView.post并直接运行它,而不使用任何线程…我已使用
post
编辑了我的post 120000篇,未立即退出的编辑了60000篇。没有
post
,看到这个错误,我就开始尝试添加它。正如我所说,我尝试在
post
之外直接运行它,但失败了。不过,我不能在每个线程之外运行它,因为这个调用是由网络活动触发的,而网络活动本身就在一个单独的线程中。我不扩展插件,所以我认为这不会有什么帮助。你可能想重新构造你的代码,使其成为一个插件,因为这将使JS到本机端的通信更容易。事实证明,随着谷歌搜索的增多,其他人也推荐sendJavascript。我以为我发的是对的,但事实证明我不是;Eclipse在抱怨我如何使用它。关于这种方法,似乎很少有宝贵的文档,尽管它显然是正确的使用方法。