4

与此问题类似,但解决方案在 mycase 中不起作用。

运行函数 webview.loadUrl 时,Android 应用程序崩溃关闭时
出现以下错误:

E/AndroidRuntime(1593):原因:java.lang.Throwable:警告:在线程“WebViewCoreThread”上调用了 WebView 方法。所有 WebView 方法都必须在 UI 线程上调用。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();        
             }
   }
4

2 回答 2

7

E/AndroidRuntime(1593):原因:java.lang.Throwable:警告:在线程“WebViewCoreThread”上调用了 WebView 方法。所有 WebView 方法都必须在 UI 线程上调用。WebView 的未来版本可能不支持在其他线程上使用。

正如错误指出的那样..您正在非 UI 线程(在单击侦听器内)上调用 webview 方法。

在 onClick 内部调用 web 视图方法时,您应该使用runOnUiThread来使用主线程

  MainActivity.this.runOnUiThread(new Runnable(){
       @Override
        public void run() {
           String value = input.getText().toString();
           webView.loadUrl("javascript:window."+funct+"('"+value+"')");
           return;
        }
 });
于 2013-10-26T16:31:53.563 回答
1

或者,您可以使用 Runnable 在 UI 线程上使用 WebView 并消除问题:

webView.post(new Runnable()
{
    @Override
    public void run()
    {
       String value = input.getText().toString();
       webView.loadUrl("javascript:window."+funct+"('"+value+"')");
    }
});
于 2016-07-08T12:46:22.447 回答