我有一个Android程序(Java网页视图中的html)。我可以从javascript调用Java代码。但是另一种方法停止工作(在eclipse中更新后)。
所以这就是我想做的
我试着让它在MainActivity中与WebView一起工作,但没有成功。
主要活动。JAVA
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final WebView webView = (WebView)findViewById(R.id.webView);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebChromeClient(new WebChromeClient());
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
javascr = new Javascript(this, webView);
webView.addJavascriptInterface(javascr, "AndroidFunction");
webView.loadUrl("file:///android_asset/www/index.html");
....
}
Javascript。JAVA
public class Javascript {
Context cont;
WebView webView;
Javascript(Context c, WebView w) {
cont = c;
webView = w;
}
// function called in the javascript by AndroidFunction.test();
public void test() {
// Breaking point!!!
webView.loadUrl("javascript:helloBack()");
}
错误:
03-24 11:47:50.103: W/WebView(21026): at com.android.org.chromium.base.SystemMessageHandler.handleMessage(SystemMessageHandler.java:27)
03-24 11:47:50.103: W/WebView(21026): java.lang.Throwable: A WebView method was called on thread 'JavaBridge'. All WebView methods must be called on the same thread. (Expected Looper Looper{41ab68f8} called on Looper{41bb70a8}, FYI main Looper is Looper{41ab68f8})
03-24 11:47:50.103: W/WebView(21026): at android.webkit.WebView.checkThread(WebView.java:2063)
03-24 11:47:50.103: W/WebView(21026): at android.webkit.WebView.loadUrl(WebView.java:794)
03-24 11:47:50.103: W/WebView(21026): at com.example.hellobt.Javascript.test(Javascript.java:24)
03-24 11:47:50.103: W/WebView(21026): at com.android.org.chromium.base.SystemMessageHandler.nativeDoRunLoopOnce(Native Method)
03-24 11:47:50.103: W/WebView(21026): at com.android.org.chromium.base.SystemMessageHandler.handleMessage(SystemMessageHandler.java:27)
03-24 11:47:50.103: W/WebView(21026): at android.os.Handler.dispatchMessage(Handler.java:102)
03-24 11:47:50.103: W/WebView(21026): at android.os.Looper.loop(Looper.java:137)
03-24 11:47:50.103: W/WebView(21026): at android.os.HandlerThread.run(HandlerThread.java:61)
谢谢你的回答。我在Javascript文件中编辑了函数,如下所示:
private void test(final String s) {
webView.post(new Runnable() {
public void run() {
webView.loadUrl("javascript:" + s + ";");
}
});
System.out.println("javscript done..");
}
Java版本:您必须使用Runnable接口和Post to Handler。
webView.post(new Runnable() {
@Override
public void run() {
webView.loadUrl("file:///android_asset/www/index.html");
}
});
Kotlin版本:
webView.post(new Runnable {
webView.loadUrl("file:///android_asset/www/index.html")
})
在我的情况下,WebView中没有显示任何内容,因此我更喜欢另一种方式:
runOnUiThread(new Runnable() {
@Override
public void run() {
final WebView webView = (WebView) findViewById(R.id.map);
webView.loadDataWithBaseURL(...);
}
});
JavaScript方法在后台(即非UI)线程上执行。你需要在UI线程上调用所有Android View相关的方法。您可以通过以下方式实现所需:
mWebView.post(new Runnable() {
@Override
public void run() {
mWebView.loadUrl(...).
}
});
它将发布要在UI线程上运行的任务。
这是我的kotlin代码: 但这是崩溃。 引起:java.lang.Throwable:在线程JavaBridge上调用了WebView方法。所有WebView方法必须在同一个线程上调用。 我怎样才能解决这个问题?我通过搜索找到了解决方案,但这是java代码。Kotlin和Java兼容,但由于语法错误而未运行。(我想这是因为我不知道Kotlin和Java。无论如何) 我是一个基于JavaScrip
本文向大家介绍C# 线程同步的方法,包括了C# 线程同步的方法的使用技巧和注意事项,需要的朋友参考一下 一、进程内部的线程同步 1、使用lock,用法如下: 特性:只能传递对象,无法设置等待超时 2、使用:InterLocked(原子操作) 其在System.Threading命名空间下,Interlocked实际是类控制计数器,从而实现进程的同步,其很容易实现生产者消费者模型 3、使用Monit
我试图从WebView中javascript调用的方法调用WebView方法。然后Webview应该返回方法中使用的值。 html事件- 显然,Webview在ui线程中运行,而js不运行,webview的方法必须从同一个线程调用。此方法可用于从非ui线程调用方法: 但我也想返回结果<代码>返回webView。例如,getUrl()。我该怎么做?
本文向大家介绍请介绍一下线程同步和线程调度的相关方法。相关面试题,主要包含被问及请介绍一下线程同步和线程调度的相关方法。时的应答技巧和注意事项,需要的朋友参考一下 考察点:线程同步- wait():使一个线程处于等待(阻塞)状态,并且释放所持有的对象的锁;- sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要处理InterruptedException异常;- noti
本文向大家介绍五种Java多线程同步的方法,包括了五种Java多线程同步的方法的使用技巧和注意事项,需要的朋友参考一下 为什么要线程同步 因为当我们有多个线程要同时访问一个变量或对象时,如果这些线程中既有读又有写操作时,就会导致变量值或对象的状态出现混乱,从而导致程序异常。举 个例子,如果一个银行账户同时被两个线程操作,一个取100块,一个存钱100块。假设账户原本有0块,如果取钱线程和存钱线程同
本文向大家介绍请简述一下实现多线程同步的方法?相关面试题,主要包含被问及请简述一下实现多线程同步的方法?时的应答技巧和注意事项,需要的朋友参考一下 考察点:多线程 可以使用synchronized、lock、volatile和ThreadLocal来实现同步。 考察点:多线程 可以使用加锁,比如synchronized或者lock。也可以使用Concurrent包下的原子类。