android应用程序在webview url更改时崩溃

Posted

技术标签:

【中文标题】android应用程序在webview url更改时崩溃【英文标题】:android app crashing on webview url change 【发布时间】:2013-11-05 05:12:25 【问题描述】:

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

运行函数 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();        
             
   

【问题讨论】:

WebView Methods is not called in android的可能重复 【参考方案1】:

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

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

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

  MainActivity.this.runOnUiThread(new Runnable()
       @Override
        public void run() 
           String value = input.getText().toString();
           webView.loadUrl("javascript:window."+funct+"('"+value+"')");
           return;
        
 );

【讨论】:

【参考方案2】:

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

webView.post(new Runnable()

    @Override
    public void run()
    
       String value = input.getText().toString();
       webView.loadUrl("javascript:window."+funct+"('"+value+"')");
    
);

【讨论】:

这样更简洁,因为您不需要引用活动

以上是关于android应用程序在webview url更改时崩溃的主要内容,如果未能解决你的问题,请参考以下文章

Android检测webview URL更改

Webview没有清除上一页Android

如果第一个 URL 不存在于 android webView 中,则加载第二个 URL

Android webview如何检测何时重新加载

为啥 android webView 不支持 webSocket?

当Webview方向更改然后按下后退按钮时,应用程序崩溃