在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中使用

Android kotlin 使用原始WebView加载字符串Html img标签中oss图片过高加载失败

原文地址: http://www.cveoy.top/t/topic/iJkU 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录