在android webView中导致这种情况的原因是什么?

时间:2012-04-20 05:30:36

标签: android webview runtimeexception

我收到以下异常但无法调试它。

请帮助。
代码:

public class HybridActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        WebView webview=(WebView)findViewById(R.id.webkitWebView1);
        WebSettings settings=webview.getSettings();
        settings.setJavaScriptEnabled(true);
        settings.setDatabaseEnabled(true);
        settings.setDomStorageEnabled(true);
        settings.setAllowFileAccess(true);
        settings.setBuiltInZoomControls(true);
        webview.setWebChromeClient(new WebChromeClient());

        //  webview.loadUrl("file:///android_asset/www/html/hyb.html");
        // webview.loadUrl("file:///android_asset/index.html");
        try {
            webview.loadUrl("http://www.google.com");
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        MultipleWebViewHanlder webView2 = new MultipleWebViewHanlder(this);
        webView2.loadNewWebView();
    }
}

public class MultipleWebViewHanlder {
    public MultipleWebViewHanlder(Context context) {
        // TODO Auto-generated constructor stub
        this.context = context;
    }

    public void MultipleWebViewArea(final String command) {

        final RelativeLayout.LayoutParams params = new  RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT, RelativeLayout.LayoutParams.FILL_PARENT);
        try {
            Log.i("","Inside tryyyyyyyyyyyyyyyyyyyyy");
            final WebView mWebView = new WebView(context);

            WebSettings settings=mWebView.getSettings();
            settings.setJavaScriptEnabled(true);
            settings.setDatabaseEnabled(true);
            settings.setDomStorageEnabled(true);
            settings.setAllowFileAccess(true);
            settings.setBuiltInZoomControls(true);
            mWebView.setWebChromeClient(new WebChromeClient());
            JSInterface.handler.post(new Runnable() {

                @Override
                public void run() {
                    try {
                        Log.i("","Inside tryyyyyyyyyyyyyyyyyyyy b4 add content viewwwwwwwwww");
                        Runnable runnable = new Runnable() {
                            public void run() {
                                ((Activity)context).addContentView(mWebView,params);
                                Log.i("","Inside tryyyyyyyyyyyyyyyyyyyy after add content viewwwwwwwwww ");
                                mWebView.loadUrl(((Activity)context).getResources().getString(R.string.DemoURL));
                            }
                        };
                        ((Activity)context).runOnUiThread(runnable);

日志:

04-20 10:55:58.052: WARN/dalvikvm(9255): threadid=8: thread exiting with uncaught exception (group=0x400207d8)
04-20 10:55:58.092: ERROR/AndroidRuntime(9255): FATAL EXCEPTION: WebViewCoreThread  
04-20 10:55:58.092: ERROR/AndroidRuntime(9255): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.  
04-20 10:55:58.092: ERROR/AndroidRuntime(9255):     at android.view.ViewRoot.checkThread(ViewRoot.java:2812)  
04-20 10:55:58.092: ERROR/AndroidRuntime(9255):     at android.view.ViewRoot.invalidateChild(ViewRoot.java:607)  
04-20 10:55:58.092: ERROR/AndroidRuntime(9255):     at android.view.ViewRoot.invalidateChildInParent(ViewRoot.java:633)  
04-20 10:55:58.092: ERROR/AndroidRuntime(9255):     at android.view.ViewGroup.invalidateChild(ViewGroup.java:2505)
04-20 10:55:58.092: ERROR/AndroidRuntime(9255):     at android.view.View.invalidate(View.java:5115)
04-20 10:55:58.092: ERROR/AndroidRuntime(9255):     at android.webkit.WebView.viewInvalidate(WebView.java:2565)
04-20 10:55:58.092: ERROR/AndroidRuntime(9255):     at android.webkit.WebView.invalidateContentRect(WebView.java:2584)
04-20 10:55:58.092: ERROR/AndroidRuntime(9255):     at android.webkit.WebView.access$6200(WebView.java:304)
04-20 10:55:58.092: ERROR/AndroidRuntime(9255):     at android.webkit.WebView$PrivateHandler.handleMessage(WebView.java:7860)
04-20 10:55:58.092: ERROR/AndroidRuntime(9255):     at android.os.Handler.dispatchMessage(Handler.java:99)
04-20 10:55:58.092: ERROR/AndroidRuntime(9255):     at android.os.Looper.loop(Looper.java:123)
04-20 10:55:58.092: ERROR/AndroidRuntime(9255):     at android.webkit.WebViewCore$WebCoreThread.run(WebViewCore.java:637)
04-20 10:55:58.092: ERROR/AndroidRuntime(9255):     at java.lang.Thread.run(Thread.java:1096)
04-20 10:55:58.102: WARN/ActivityManager(172):   Force finishing activity com.Hy5/.activity.Hy5CanvasActivity

1 个答案:

答案 0 :(得分:5)

没有看到代码就很难说 但似乎你正在尝试从它的所有者线程之外更改一个元素(这可能是因为你试图从其他线程更改UI元素)。

所以试试这个:有一个辅助函数runOnUiThread()接受一个runnable作为参数:

Runnable runnable = new Runnable() {
    public void run() {
        // your code here
    }
}

runOnUiThread(runnable);