Android kotlin 使用原始WebView加载字符串Html img标签中oss图片过高加载失败
在Android Kotlin中,可以使用原始WebView加载字符串HTML,并处理标签中oss图片过高加载失败的问题。可以通过自定义WebViewClient来实现。
下面是一个示例代码:
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.os.Bundle
import android.webkit.WebView
import android.webkit.WebViewClient
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val webView: WebView = findViewById(R.id.webView)
// 设置WebViewClient
webView.webViewClient = object : WebViewClient() {
override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
super.onPageStarted(view, url, favicon)
// 页面开始加载时回调
}
override fun onPageFinished(view: WebView?, url: String?) {
super.onPageFinished(view, url)
// 页面加载完成时回调
}
override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean {
// 处理点击链接在当前WebView中加载
view?.loadUrl(url)
return true
}
override fun onReceivedError(view: WebView?, errorCode: Int, description: String?, failingUrl: String?) {
super.onReceivedError(view, errorCode, description, failingUrl)
// 处理加载错误,例如加载oss图片过高失败
if (description?.contains("net::ERR_FILE_NOT_FOUND") == true) {
// 加载失败,替换为默认图片
val defaultImage = BitmapFactory.decodeResource(resources, R.drawable.default_image)
view?.loadDataWithBaseURL(null, "<html><body><img src=\"data:image/png;base64," + toBase64(defaultImage) + "\"/></body></html>", "text/html", "UTF-8", null)
}
}
}
// 加载字符串HTML
val html = "<html><body><img src=\"https://example.com/oss_image.jpg\"/></body></html>"
webView.loadDataWithBaseURL(null, html, "text/html", "UTF-8", null)
}
// 将Bitmap转换为Base64字符串
private fun toBase64(bitmap: Bitmap): String {
val byteArrayOutputStream = ByteArrayOutputStream()
bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream)
val byteArray = byteArrayOutputStream.toByteArray()
return Base64.encodeToString(byteArray, Base64.DEFAULT)
}
}
在上述示例代码中,通过自定义WebViewClient来处理WebView加载过程中的各种回调事件。在onReceivedError方法中,可以捕获加载错误,并进行处理。当加载oss图片过高失败时,替换为默认图片。
注意:上述示例中使用了toBase64方法将默认图片转换为Base64字符串,以便在HTML中使用
原文地址: http://www.cveoy.top/t/topic/iJkU 著作权归作者所有。请勿转载和采集!