在我的项目中,使用webview加载pdf。
在onCreate中初始化webview
WebSettings webSettings = webView.getSettings();
webSettings.setUseWideViewPort(true);
webSettings.setLoadWithOverviewMode(true);
webSettings.setLoadsImagesAutomatically(true);
webSettings.setDefaultTextEncodingName("utf-8");
webSettings.setSupportZoom(true);
webSettings.setBuiltInZoomControls(true);
webSettings.setDisplayZoomControls(false);
webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
webSettings.setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Log.d("test", "shouldOverrideUrlLoading");
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
Log.d("test", "onPageFinished");
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
Log.d("test", "onPageStarted url=" + url);
}
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
super.onReceivedError(view, errorCode, description, failingUrl);
Log.d("test", "onReceivedError errorCode=" + errorCode + " description=" + description);
}
@Override
public void onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse) {
super.onReceivedHttpError(view, request, errorResponse);
Log.d("test", "onReceivedHttpError");
}
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
super.onReceivedSslError(view, handler, error);
Log.d("test", "onReceivedSslError error=" + error.toString());
}
当请求网络获取pdf网址时,请调用webview.loadUrl()
String encodeUrl = URLEncoder.encode(pdfUrl, "UTF-8");
Log.d("test", "start load pdf");
webView.loadUrl("https://docs.google.com/gview?embedded=true" + "&url=" + encodeUrl);
但是有时Webview会显示为空白,而那一次我发现Log是
start load pdf
onPageFinished
我不知道为什么不调用onPageStarted,而是直接调用onPageFinished,甚至没有收到任何错误。活动频繁打开并完成且Webview加载未完成时,出现此错误的可能性很高。
谢谢你。