2016-01-24 116 views
1

我在加載特定網頁的應用程序中有WebView使用加載的網頁的JavaScript調用重新加載WebView

在該網頁上是一個按鈕,它使用JavaScript調用Android活動中的方法來重新加載WebView中的URL(有效地將Web應用程序重置爲默認狀態)。

我已經有了Android接口的所有JavaScript接口,這要感謝這裏的幾個主題,我可以彈出一個Toast來顯示該應用即將重新加載,但我的WebView出現錯誤.loadUrl()調用如下。

java.lang.RuntimeException: java.lang.Throwable: A WebView method was called on thread 'JavaBridge'. All WebView methods must be called on the same thread. (Expected Looper Looper (main, tid 1) {1d015c84} called on Looper (JavaBridge, tid 122148) {33703881}, FYI main Looper is Looper (main, tid 1) {1d015c84}) 

我猜,這是因爲在做重載的方法是不是這個活動的其中做了所有的其他WebView東西onCreate方法中,但我不知道,如果這真的是問題以及如何解決它 - 因爲重新加載URL的方法需要位於JavascripInterface類中,以便從網頁內部可訪問。

回答

1

由於某種原因需要在WebView組件網絡(或重新加載)中加載頁面,因此只需在runOnUiThread中包裝重新加載的呼叫即可解決此問題。

@JavascriptInterface 
    public void reloadSite(){ 
     Toast.makeText(mContext, getString(R.string.reloadingWebApp), Toast.LENGTH_LONG).show(); 
     runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       mWebView = (WebView) findViewById(R.id.activity_main_webview); 
       mWebView.loadUrl(getString(R.string.web_app_url)); 
      } 
     }); 
    }