【问题标题】:android.view.ViewRoot$CalledFromWrongThreadExceptionandroid.view.ViewRoot$CalledFromWrongThreadException
【发布时间】:2013-04-25 17:05:25
【问题描述】:

HTML:

<a href="javascript:AndroidFunction.xxxx()">xxxx</a>

活动:

public class MainActivity extends Activity
    {
    @Override
    protected void onCreate(Bundle savedInstanceState)
            {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);        

        WebView webview = (WebView) findViewById(R.id.webview);
        final MyJavaScriptInterface myJavaScriptInterface = new MyJavaScriptInterface(this);
        webview.addJavascriptInterface(myJavaScriptInterface, "AndroidFunction");
        webview.getSettings().setJavaScriptEnabled(true); 
        webview.loadUrl("file:///android_asset/x1.html");        
    }

    public class MyJavaScriptInterface {
        Context mContext;

        MyJavaScriptInterface(Context c) {
            mContext = c;
        }

        public void xxxx()
        {
            setContentView(R.layout.x);              
        }
    }
}

我得到这个错误:

未捕获的处理程序:thread WebViewCoreThread exiting due to uncaught exception android.view.ViewRoot$CalledFromWrongThreadException

只有创建视图层次结构的原始线程才能接触其视图。

请帮帮我。

【问题讨论】:

    标签: android


    【解决方案1】:

    首先,除了onCreate,您不应该在任何地方拨打setContentView。如果您想更改Views,请在您的布局层次结构中创建一个新的Activity 或添加/更新Views。

    另外,这个CalledFromWrongThreadException 表示您在不在 UI 线程上时尝试编辑 Views,这是不允许的(因为我现在不会讨论的原因)。我建议您使用View.post(Runnable action) 在 UI 线程上编辑View。我的answer to this question 应该可以帮到你。

    【讨论】:

      【解决方案2】:

      试试

      public void xxxx() {
          runOnUiThread(new Runnable() {
              public void run() {
                 setContentView(R.layout.x);              
              }
          });
      }
      

      【讨论】:

        【解决方案3】:

        原因: 如果您尝试从 UI 线程外部将 UI 事件发送到 UI 线程,则此错误很常见。 测试方法 Thread 尝试在 UI 线程之外与 UI 交互。

        建议: 使用Handler解决原因。

        解决方案:Link

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-03-22
          • 1970-01-01
          • 2023-03-30
          相关资源
          最近更新 更多