Попытка отобразить PDF-файлы онлайн в приложении android (с использованием kotlin) в веб-просмотре с помощью диска Google иногда приводит к ошибкам - PullRequest
1 голос
/ 27 января 2020

Я пытался исправить это весь день. Я пытаюсь отобразить различные PDF-файлы, сохраненные в Интернете, в веб-представлении с помощью диска Google, чтобы он загружал страницу за страницей, но не загружал его локально.

Всякий раз, когда я go загружаю в веб-представление для загрузки pdf это обычно работает, но после каждой пары попыток я получаю следующую ошибку:

"Uncaught CustomError: Did not receive drive#about kind when fetching import map:undefined", source: https://www.gstatic.com/_/apps-viewer/_/js/k=apps-viewer.standalone.iw.nPmJUigVjYY.O/d=1/ct=zgms/rs=AC2dHMJ5W67xChDpdTOaSavkSV5aN0BM8g/m=main (92)
[INFO:CONSOLE(92)] "Uncaught [object Object]", source: https://www.gstatic.com/_/apps-viewer/_/js/k=apps-viewer.standalone.iw.nPmJUigVjYY.O/d=1/ct=zgms/rs=AC2dHMJ5W67xChDpdTOaSavkSV5aN0BM8g/m=main (92)

Я пытался выяснить, что является причиной этого в течение всего дня, но мне не удалось это исправить. Любые идеи, что может быть причиной / как я могу это исправить?

Я кодирую это приложение, используя kotlin, вот фрагмент, который я использую для отображения PDF, он получает URL-адрес PDF из базы данных, Сам URL не является проблематичным c.

class WebViewPdf : Fragment() {

lateinit var webView: WebView
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
    if (pdfLoadingPanel != null) {
        pdfLoadingPanel.visibility = View.GONE
    }
    var view = inflater.inflate(com.madortilofficialapps.tilquiz.R.layout.fragment_pdf_view, container, false)
    webView = view.findViewById(
            com.madortilofficialapps.tilquiz.R.id.webView) as WebView
    var googleDocs = "https://docs.google.com/viewer?embedded=true&url="
    val url = arguments!!.getString("url")
    webView.invalidate()
    webView.settings.javaScriptEnabled = true
    webView.settings.setSupportZoom(true)
    webView.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null)
    webView.settings.domStorageEnabled = true
    var didLoadPDF = false
    Log.d("LKJLKHLKHLHLKHLHKLH","Starting")
    webView.webViewClient = object : WebViewClient() {
        override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
            super.onPageStarted(view, url, favicon)
            Log.d("lkhnjlkjlkj", "Loading")
            if (pdfLoadingPanel != null) {
                pdfLoadingPanel.visibility = View.VISIBLE
            }
            didLoadPDF = true
        }

        override fun onPageFinished(view: WebView?, url: String?) {
            super.onPageFinished(view, url)
           if(!didLoadPDF){
                webView.loadUrl(googleDocs + url)
            }else {
                Log.d("dagfagaga", "Finished loading")
                if (pdfLoadingPanel != null) {
                    pdfLoadingPanel.visibility = View.GONE
                }
               if(webView.title == ""){
                   webView.reload()
               }
            }
        }
    }
    webView.loadUrl(googleDocs + url)
    return view
}

override fun onPause() {
    super.onPause()
    webView.clearCache(true)
    webView.getSettings().setAppCacheEnabled(false);
    activity?.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)
}

override fun onDestroyView() {
    super.onDestroyView()
    webView.destroy()
}

override fun onResume() {
    super.onResume()
    activity?.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR)
}

РЕДАКТИРОВАТЬ: мне удалось это исправить, вот как для людей с этой проблемой в будущем. По сути, я отладил webView.Title и обнаружил, что всякий раз, когда он выдает ошибку, заголовок был не тем, что я хотел. продолжая это, я обнаружил, что по какой-то причине, хотя переменная url была val, она менялась после каждого раза, добавляя переменную googleDocs в начало, и становилась что-то вроде этого: "https://docs.google.com/viewer?embedded=true&url=https: // docs.google.com/viewer?embedded=true&url=https://docs.google.com/viewer?embedded=true&url=example.pdf ", поэтому я добавил добавление googleDocs в URL в начале программы, перед тем как запустить веб-просмотр, а затем загружать его только сам по себе, даже если веб-приложение сначала не загружалось и пыталось загрузить его рекурсивно, URL-адрес не увеличивался.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...