加载时在 webview 中显示白页 (PDF url) url android

show white page in webview when load (PDF url) url android

我尝试将 pdf URL 加载到 webview,但有时 URL 加载完美或有时显示白页。它显示一个白页,因为它直接调用了 onPageFinished 方法。我尝试登录 onReceivedSslErroronReceivedHttpError 但是当加载白屏时它直接调用 onPageFinished 方法。我怎样才能每次使用 URL?

加载我的 pdf

我的代码是:-

     url = getIntent().getStringExtra("url");
        fileName = getIntent().getStringExtra("name");

        try {
            masterURL = "https://drive.google.com/viewerng/viewer?embedded=true&url=" + URLEncoder.encode(url, "UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }

        requireNonNull(getSupportActionBar()).setTitle(fileName + " Report");
        WebSettings settings = webview.getSettings();
        settings.setJavaScriptEnabled(true);
        settings.setAppCacheEnabled(true);
        settings.setDomStorageEnabled(true);
        settings.setLoadsImagesAutomatically(true);
        settings.setDatabaseEnabled(true);
        settings.setRenderPriority(WebSettings.RenderPriority.HIGH);
        settings.setCacheMode(WebSettings.LOAD_NO_CACHE);
        settings.setSupportZoom(true);
        settings.setBuiltInZoomControls(true);

        //webview.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);
        //webview.invalidate();

        webview.setWebViewClient(new WebViewClient() {
            public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
                Toast.makeText(TestPDFActivity.this, errorCode, Toast.LENGTH_SHORT).show();

                progressDialog.dismiss();
            }

            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {


            }

            @Override
            public void onPageFinished(WebView view, String url) {
                progressDialog.dismiss();

            }

            @Override
            public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
                super.onReceivedSslError(view, handler, error);
                handler.proceed();

            }

            @Override
            public void onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse) {
                super.onReceivedHttpError(view, request, errorResponse);

            }
        });


        webview.loadUrl(masterURL);

这是工作代码。可能会有帮助。

XML

<?xml version="1.0" encoding="utf-8"?>
<layout>

    <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".activities.WebViewActivity">

        <WebView
            android:id="@+id/webview"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

Kotlin

class WebViewActivity : AppCompatActivity() {
    private lateinit var activityWebViewBinding: ActivityWebViewBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        activityWebViewBinding = DataBindingUtil.setContentView(this, R.layout.activity_web_view)
        val path =  "https://github.github.com/training-kit/downloads/github-git-cheat-sheet.pdf"
        loadPdfFromURL(path)
    }

    @SuppressLint("SetJavaScriptEnabled")
    private fun loadPdfFromURL(path: String?) {
        activityWebViewBinding.webview.settings.loadWithOverviewMode = true
        activityWebViewBinding.webview.settings.javaScriptEnabled = true
        val url = "https://docs.google.com/gview?embedded=true&url=$path"
        activityWebViewBinding.webview.loadUrl(url)
    }
}

最后我得到了答案只需将这行添加到 onPageFinished 方法中:-

if (view.getTitle().equals("")) {
                view.reload();

   }

和繁荣它的工作!!

将这行添加到 onPageFinished 方法中

if (view.getTitle().equals("")) { view.reload();

}