2012-04-20 25 views
4

次の例外が発生し、デバッグできません。これはandroid webViewで何が起こっていますか?

助けてください。
コード:

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 
+0

コードしてください..... !! –

+1

"ビュー階層を作成した元のスレッドのみがビューに触れることができます。 - 単純な答えは、別のスレッドを使用してUIを操作しようとしているが、コードを投稿しない限り、誰もあなたが正しく修正するのを手助けすることができない。 – Squonk

答えて

5

それは、コードを見ずに言うのは難しいです が、あなたが、これができた(それの所有者スレッドの外からの要素を変更しようとしているようです他のスレッドからUI要素を変更しようとしているために発生します)。

だから、これを試してみてください。引数として実行可能な受け入れヘルパー関数runOnUiThread()があります:

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

runOnUiThread(runnable); 
関連する問題