2013-07-30 14 views
7

La mia vista Web non sta chiamando la funzione javascript che sta restituendo avvisi come di seguito. Qualcuno può suggerire come sbarazzarsi del seguente avviso.I metodi WebView non vengono chiamati in 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.

Qui di seguito è la mia funzione.

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; 
} 

risposta

6

L'avviso ti sta dicendo tutto. Stai chiamando direttamente i metodi della webview. Ciò significa che li stai chiamando su WebViewCoreThread. Devi chiamarli sul thread UI che significa nell'attività che usa questa webview.

come:

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

È la stessa cosa nel problema che se avessi chiamato i metodi di WebView in AsyncTask, non funzionerebbe? –

+0

Questa risposta è accettata e non vedo setJavaScriptEnabled() o altri metodi per l'istanza di WebView. – seema

+0

Immagino che tu sia su una versione più recente di Android. Questo post è stato pubblicato su Android 2.3.3 penso. Non ne sono affatto sicuro. Nelle versioni più recenti è necessario utilizzare il seguente codice: 'wv.getSettings(). SetJavaScriptEnabled (true)'. spero che questo risolva il tuo problema – ZeusNet

2

utilizzare questo codice ho pensa che lavorerà per voi, e modificato in base alle proprie esigenze ##

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 è membro di WebView?

Sembra che non sia possibile chiamare tutti i metodi WebView sul thread "WebViewCoreThread".

È possibile utilizzare il gestore, inviare msg al gestore in onLongClick, quindi chiamare i metodi WebView nel gestore.

0

Penso che sia necessario eseguire il codice del metodo onLongClick in runOnUIThread() o utilizzando Handler, questo avviso è dovuto all'utilizzo di tutto ciò su un thread di lavoro.

15

Come dice l'avviso, si stanno chiamando i metodi di visualizzazione Web nello WebViewCoreThread. Così modificare il codice come questo,

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

è possibile utilizzare WebView tramite Runnable. Non è necessario utilizzare l'attività.

webView.post(new Runnable() 
    { 
     @Override 
     public void run() 
     { 
      getSettings().setJavaScriptEnabled(true); 
      getSettings().setJavaScriptCanOpenWindowsAutomatically(true); 
      getSettings().setPluginsEnabled(true); 
      loadUrl("javascript:android.selection.longTouch();"); 
      mScrolling = true; 
     } 
    }); 
Problemi correlati