&引用;与服务器的连接不成功";尝试在WebView中调用javascript时
与这里的其他问题不同,PhoneGap/Android应用程序运行良好,可以加载视图和外部链接的javascript文件,除非我试图从Java端调用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
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在抱怨我如何使用它。关于这种方法,似乎很少有宝贵的文档,尽管它显然是正确的使用方法。