与此question类似,但解决方案无法解决问题。
运行功能webview.loadUrl时,Android应用程序崩溃了 关闭时收到以下错误:
E / AndroidRuntime(1593):引起: java.lang.Throwable:警告:在线程上调用了一个WebView方法 'WebViewCoreThread'。必须在UI上调用所有WebView方法 线。 WebView的未来版本可能不支持在其他版本上使用 线程。
编辑:现在尝试在runOnUiThread(new Runnable(){})中运行该函数,但是遇到错误并且无法在上下文中输入runOnUiThread。
这是完整的代码:
public class MyJavaScriptInterface {
@JavascriptInterface
public void androidFieldPrompt(String title, String msg, final String funct) {
final EditText input = new EditText(MainActivity.this);
AlertDialog.Builder alert = new AlertDialog.Builder(MainActivity.this);
alert.setTitle(title);
alert.setMessage(msg);
alert.setView(input);
alert.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
String value = input.getText().toString();
// ERROR IS BEING THROWN HERE
webView.loadUrl("javascript:window."+funct+"('"+value+"')");
return;
}
});
alert.show();
}
}
答案 0 :(得分:7)
E / AndroidRuntime(1593):引起:java.lang.Throwable:警告:A 在线程'WebViewCoreThread'上调用了WebView方法。所有WebView 必须在UI线程上调用方法。 WebView的未来版本 可能不支持在其他线程上使用。
正如错误所指出的那样..你在非UI线程上调用webview方法(在点击监听器内)。
在调用web视图方法时,你应该使用runOnUiThread来使用主线程,在onClick
里面 MainActivity.this.runOnUiThread(new Runnable(){
@Override
public void run() {
String value = input.getText().toString();
webView.loadUrl("javascript:window."+funct+"('"+value+"')");
return;
}
});
答案 1 :(得分:0)
或者,您可以使用Runnable在UI线程上使用WebView并消除此问题:
webView.post(new Runnable()
{
@Override
public void run()
{
String value = input.getText().toString();
webView.loadUrl("javascript:window."+funct+"('"+value+"')");
}
});