2013-07-30 37 views
7

Chế độ xem web của tôi không gọi hàm javascript mà nó đang trả về cảnh báo như dưới đây. Ai có thể đề nghị làm thế nào để thoát khỏi cảnh báo dưới đây.Phương thức WebView không được gọi trong android

07-30 10:15:44.031: W/webview_proxy(3770): java.lang.Throwable: Warning: A WebView method was called on thread 'WebViewCoreThread'. All WebView methods must be called on the UI thread. Future versions of WebView may not support use on other threads.

Dưới đây là chức năng của tôi.

public boolean onLongClick(View v){ 
    System.out.println("dfdsf"); 
    // Tell the javascript to handle this if not in selection mode 
    //if(!this.isInSelectionMode()){ 
     this.getSettings().setJavaScriptEnabled(true); 
     this.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); 
     this.getSettings().setPluginsEnabled(true); 
     this.loadUrl("javascript:android.selection.longTouch();"); 
     mScrolling = true; 
     //this.setJavaScriptEnabled(true); 
    //} 


    // Don't let the webview handle it 
    return true; 
} 

Trả lời

6

Cảnh báo đang cho bạn biết mọi thứ. Bạn đang gọi trực tiếp các phương thức webview. Điều đó có nghĩa là bạn đang gọi chúng trên WebViewCoreThread. Bạn phải gọi chúng trên Chủ đề giao diện người dùng có nghĩa là trong Hoạt động sử dụng chế độ xem web này.

Giống như:

WebView wv = (WebView)findViewById(id); 
wv.setJavaScriptEnabled(true); 
wv.setJavaScriptCanOpenWindowsAutomatically(true); 
wv.setPluginsEnabled(true); 
wv.loadUrl("javascript:android.selection.longTouch();"); 
+0

Điều tương tự trong vấn đề là nếu tôi gọi bất kỳ phương thức WebView nào trong AsyncTask, thì nó sẽ không hoạt động? –

+0

Đây là câu trả lời được chấp nhận và tôi không thể thấy setJavaScriptEnabled() hoặc các phương thức khác cho cá thể WebView. – seema

+0

Tôi đoán bạn đang sử dụng phiên bản Android mới hơn. Bài viết này đã được xuất bản trên Android 2.3.3 tôi nghĩ. Tôi không chắc chắn chút nào. Trong các phiên bản mới hơn, bạn phải sử dụng đoạn mã sau: 'wv.getSettings(). SetJavaScriptEnabled (true)'. Hi vọng nó có thể giải quyết vấn đề của bạn – ZeusNet

2

Sử dụng Bộ luật này tôi nghĩ rằng nó sẽ làm việc cho bạn, và điều chỉnh nó theo nhu cầu của bạn ##

private WebView webView; 


    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.web); 

     webView = (WebView) findViewById(R.id.web_view); 
     webView.setInitialScale(1); 
     webView.getSettings().setJavaScriptEnabled(true); 
     webView.getSettings().setLoadWithOverviewMode(true); 
     webView.getSettings().setUseWideViewPort(true); 
     webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); 
     webView.setScrollbarFadingEnabled(false); 
     webView.loadUrl("http://www.youtube.com"); 

    } 

} 
0

onLongClick là thành viên của webview?

Có vẻ như bạn không thể gọi tất cả các phương thức WebView trên chuỗi 'WebViewCoreThread'.

Bạn có thể sử dụng trình xử lý, gửi msg đến trình xử lý trong onLongClick, sau đó gọi các phương thức WebView trong trình xử lý của bạn.

0

Tôi nghĩ bạn phải thực thi mã của phương thức onLongClick trong runOnUIThread() hoặc sử dụng Handler, cảnh báo này là do sử dụng tất cả điều này trên một chuỗi công nhân.

15

Khi cảnh báo cho biết bạn đang gọi phương thức xem web trong WebViewCoreThread. Do đó, sửa đổi mã của bạn như thế này,

public boolean onLongClick(View v){ 
    YourActivity.this.runOnUiThread(new Runnable() { 
     public void run() { 
      this.getSettings().setJavaScriptEnabled(true); 
      this.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); 
      this.getSettings().setPluginsEnabled(true); 
      this.loadUrl("javascript:android.selection.longTouch();"); 
      mScrolling = true; 
     } 
    }); 
} 
0

bạn có thể sử dụng WebView qua Runnable. Không cần sử dụng Hoạt động.

webView.post(new Runnable() 
    { 
     @Override 
     public void run() 
     { 
      getSettings().setJavaScriptEnabled(true); 
      getSettings().setJavaScriptCanOpenWindowsAutomatically(true); 
      getSettings().setPluginsEnabled(true); 
      loadUrl("javascript:android.selection.longTouch();"); 
      mScrolling = true; 
     } 
    }); 
Các vấn đề liên quan