Вызов обратных вызовов WebViewClient в WebView.reload()Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Вызов обратных вызовов WebViewClient в WebView.reload()

Сообщение Anonymous »

Я создаю приложение для Android с помощью WebView. Вот выполненные шаги:
  • Показать индикатор выполнения при запуске
  • Загрузить мою веб-страницу
  • Если страница загружается успешно, скройте индикатор выполнения и отобразите веб-просмотр.
  • Если по какой-либо причине загрузка страницы не удалась, будет отображен AlertDialog с кнопками «Выход» и «Повторить». li>
Вот моя собственная реализация WebViewClient:

Код: Выделить всё

import android.app.Activity
import android.app.AlertDialog
import android.content.Intent
import android.graphics.Bitmap
import android.view.View
import android.webkit.WebResourceError
import android.webkit.WebResourceRequest
import android.webkit.WebView
import android.webkit.WebViewClient
import android.widget.ImageView
import android.widget.ProgressBar

class MyWebViewClient(
private val activity: Activity,
private val logoView: ImageView,
private val webView: WebView,
private val progressBar: ProgressBar,
private val headers: Map,
private val bounds: Array
) : WebViewClient() {
private var success: Boolean = true

override fun onPageFinished(view: WebView, url: String) {
webView.evaluateJavascript(
"adjustPadding(${bounds[0]}, ${bounds[1]}, ${bounds[2]}, ${bounds[3]})",
null
)
logoView.visibility = View.GONE
progressBar.visibility = View.GONE
webView.visibility = View.VISIBLE
Logger.log("onPageFinished()")
}

override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
Logger.log("onPageStarted()")
success = true
progressBar.visibility = View.VISIBLE
super.onPageStarted(view, url, favicon)
}

override fun onReceivedError(
view: WebView?,
request: WebResourceRequest?,
error: WebResourceError?
) {
if (!request?.isForMainFrame!!) return
success = false
Logger.log("Page load error: " + error?.description.toString())
val builder: AlertDialog.Builder = AlertDialog.Builder(activity)
builder.setMessage(R.string.unable_connect_server)
builder.setNegativeButton(activity.getString(R.string.exit)) { dialogInterface, _ ->
dialogInterface.dismiss()
activity.finish()
}
builder.setPositiveButton(activity.getString(R.string.retry)) { dialogInterface, _ ->
dialogInterface.dismiss()
webView.reload()
}
builder.setCancelable(false)
builder.create().show()
webView.visibility = View.INVISIBLE
}

override fun shouldOverrideUrlLoading(
view: WebView?,
request: WebResourceRequest?
): Boolean {
val url = request?.url.toString()
Logger.log("shouldOverrideUrlLoading(): $url")
if (url.startsWith(BuildConfig.SERVER_URL)) {
view?.loadUrl(url, headers)
} else {
activity.startActivity(Intent(Intent.ACTION_VIEW, request?.url))
}
return true
}
}
MainActivity.kt:

Код: Выделить всё

webView.settings.javaScriptEnabled = true
webView.settings.setSupportZoom(false)
if (BuildConfig.DEBUG) WebView.setWebContentsDebuggingEnabled(true)
webView.settings.userAgentString = USER_AGENT
webView.addJavascriptInterface(WebAppInterface(this), "App")

webView.webViewClient = MyWebViewClient(this, logoView, webView, progressBar, headers, bounds)
webView.webChromeClient = MyWebChromeClient(this)
webView.loadUrl(BuildConfig.SERVER_URL, headers)
Проблема: Если веб-страница не загружается, отображается диалоговое окно. Но при нажатии кнопки «Повторить» в диалоговом окне обратные вызовы onPageStarted, onPageFinished и onReceivedError не вызываются.
В некоторых сообщениях в Интернете говорилось, что что эти обратные вызовы не будут вызываться, если URL-адрес не изменится. Обходные пути, которые я пробовал:
  • Изменение URL-адреса путем добавления метки времени и случайной строки в качестве аргументов.
  • Использование webView. loadUrl(webView.url) вместо webView.reload().
  • Очистка кеша перед перезагрузкой с помощью webView.clearCache(true) .
Но ни один из способов не сработал. Как заставить эти обратные вызовы вызываться для перезагрузки страницы?

Подробнее здесь: https://stackoverflow.com/questions/791 ... iew-reload
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»