在webview中使用asynch任务加载URL失败

时间:2015-04-27 18:05:33

标签: java android multithreading webview android-asynctask

我正在尝试在另一个线程上加载我的webview,以便在请求加载后我可以在屏幕上添加一个按钮。

我这样做:

private class CustomWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {

                MyView myView = new myView();
                myView.setUrl(url);
                myView.setWebView(view);

                new DownloadFilesTask().execute(myView);
            return true;
        }
    }


private class DownloadFilesTask extends AsyncTask<MyView, Integer, Long> {
        protected Long doInBackground(MyView... myView) {

            long totalSize = 0;
            MyView amyView = myView[0];

           WebView view = amyView.getWebView();
           String url = amyView.getUrl();
            view.loadUrl(url);

            return totalSize;
        }

        protected void onProgressUpdate(Integer... progress) {

        }

        protected void onPostExecute(Long result) {
            rl.setVisibility(View.VISIBLE);
        }
    }

我收到错误:

 Caused by: java.lang.RuntimeException: java.lang.Throwable: Warning: A WebView method was called on thread 'AsyncTask #2'. All
     

必须在UI线程上调用WebView方法。未来的版本   WebView可能不支持在其他线程上使用。

如何在加载网址后显示视图?

1 个答案:

答案 0 :(得分:1)

您不应该在后台线程中加载WebView;它需要加载到UI线程上。

我会为您的WebView添加一个监听器,当网址加载完毕后,您可以添加按钮。

yourWebView.setWebViewClient(new WebViewClient() {

   public void onPageFinished(WebView view, String url) {
        // add your button here
    } 
}); 

yourWebView.loadUrl(url);