有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java WebView在完成加载侦听器时加载DataWithBaseURL

我正在使用loadDataWithBaseURL从字符串加载webview中的数据。我想实现一个侦听器,它告诉我数据何时被完全加载,以便我可以继续我的代码

我搜索了很多,但找不到任何相关的主题

if (new String(rowData.getResource().getData()) != null) webView.loadDataWithBaseURL("", new String(rowData.getResource().getData()), "text/html", "UTF-8", "about:blank");

共 (2) 个答案

  1. # 1 楼答案

    使用WebViewClient并实现onPageStarted、onPageFinished以了解webview的状态

    ProgressDialog progressDialog = new ProgressDialog.show(this);
    progressDialog.setMessage("Loading WebPage...");
    
    class CustomWebViewClient extends WebViewClient {
        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            progressDialog.dismiss();
        }
    
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
            progressDialog.show();
        }
    
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            return super.shouldOverrideUrlLoading(view, url);
        }
    
    }
    
    webview.setWebViewClient(new CustomWebViewClient());
    
  2. # 2 楼答案

    试试这个经过测试的工作演示

    public class URLActivity extends Activity {
    
        private ProgressDialog progress;
    
        @SuppressLint("SetJavaScriptEnabled")
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_webview);
    
            WebView webView = (WebView) findViewById(R.id.webView);
            webView.setInitialScale(0);
            webView.setWebViewClient(new WebViewClient());
    
            WebSettings settings = webView.getSettings();
            settings.setJavaScriptEnabled(true);
            settings.setLoadsImagesAutomatically(true);
    
            webView.loadDataWithBaseURL("", new String(rowData.getResource().getData()), "text/html", "UTF-8", "about:blank");
    
            webView.setWebChromeClient(new WebChromeClient() {
                @Override
                public void onProgressChanged(WebView view, int newProgress) {
                    super.onProgressChanged(view, newProgress);
                    if (newProgress > 0) {
                        showProgressDialog("Please Wait");
                    }
                    if (newProgress >= 100) {
                        hideProgressDialog();
    
                        // data load successfully. you can go further.
                    }
                }
            });
    
        }
    
        public void showProgressDialog(final String msg) {
    
            runOnUiThread(new Runnable() {
                public void run() {
                    if (progress == null || !progress.isShowing()) {
                        progress = ProgressDialog.show(URLActivity.this, "", msg);
                    }
                }
            });
        }
    
        public void hideProgressDialog() {
            runOnUiThread(new Runnable() {
    
                @Override
                public void run() {
                    try {
                        if (progress.isShowing())
                            progress.dismiss();
                    } catch (Throwable e) {
    
                    }
                }
            });
        }
    
    }