Kotlin Load WebView 并非每次都有效

Kotlin Load WebView is not working every time

我目前有一个通常应显示轨迹图的 WebView。在模拟器上它每次都可以工作,但在物理设备上它有时可以工作,有时它只显示黑色背景。我现在已经阅读了很多答案,但没有一个真正解决我的问题。

这是我的MapActivity.kt,我的地图逻辑就在里面。

@SuppressLint("WrongViewCast")
class MapActivity : AppCompatActivity() {
    private val TAG = "MapActivity"

    val args: MapActivityArgs by navArgs()
    var mMap: String? = null

    private lateinit var pb: ProgressBar

    //Progress bar when initialize the SVG file.
    fun initProgressDialog() {
        Log.d(TAG,"LOADED!")
        pb = ProgressBar(this)
        pb.isIndeterminate = true
    }

    override public fun onCreate(savedInstanceState: Bundle?) {
        
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_map)
        Log.d(TAG, "onCreate: "+args.map)
        this.mMap = args.map
        // TODO: 30.09.2021 Do something with me 
        Log.d(TAG, "onCreate: "+SimplePossession.State.valueOf(args.possessionState))
        setupButtonActions()
        setupWebLayout()
    }

    /** Setup the Action Buttons
     * btn_plus = ZoomIn for map
     * btn_minus = ZoomOut for map
     * btn_back = btn to go back to possession
     * btn_confirm = btn to confirm map section
     */
    fun setupButtonActions() {
        initProgressDialog()

        btn_plus.setOnClickListener{
            Log.e("Btn", "BtnZoomIN")
            wv_map.zoomIn() }
        btn_minus.setOnClickListener {
            Log.e("Btn","BtnZoomOUT")
            wv_map.zoomOut() }
        btn_back.setOnClickListener{
            Log.e("Btn","Btn back")
            onBackPressed();
        }
        btn_confirm.setOnClickListener {
            /** If possessionDetailsFragment variable set on true, means possession has
             * state: start approved or started
             * click on confirm btn set checkbox on true and return on PossessionDetails View
             */
            PossessionAreaTableEntryViewHolder.setCheckedCB(true);
            onBackPressed();
        }
    }

    override fun onResume() {
        super.onResume()
        callVM()
    }

    fun callVM() {
        try {
            var apiResponse : String? = ""
            try{
                apiResponse = mMap
            } catch(e: Exception){
                e.printStackTrace()
            }
            if (apiResponse != null) {
                Log.d(TAG, "callVM: TEEEEEEEEEEEEEEEEEEEEEEEEEEST")
                wv_map.loadData(Base64.encodeToString(apiResponse.toByteArray(StandardCharsets.UTF_8), Base64.DEFAULT),
                        "text/html; charset=utf-8", "base64")
            }

        } catch (e: Exception) {
            Log.e("FAIL", "Initializing failed")
            e.printStackTrace()
        }
    }

    @SuppressLint("AddJavascriptInterface", "SetJavaScriptEnabled")
    fun setupWebLayout() {

        wv_map.clearView()
        wv_map.setInitialScale(150)
        wv_map.settings.loadsImagesAutomatically = true
        wv_map.settings.builtInZoomControls = true
        wv_map.settings.displayZoomControls = false
        wv_map.settings.javaScriptEnabled = true
        wv_map.settings.domStorageEnabled = true
        wv_map.webChromeClient = WebChromeClient()

    }

    override fun onDestroy() {

        super.onDestroy()
    }

}

地图将通过 API 响应加载,并采用 html 格式。我仔细检查了我的 MapActivity 是否真的收到了 html 格式的地图 - 它收到了。奇怪的是,背景每次都加载正确(它只是一个黑色背景,顶部通常有轨道,但轨道不会每次都加载)...

我的想法是缓存问题,所以我尝试在再次读取地图之前清除缓存。不能解决我的问题。 然后在重新加载地图之前清除整个地图变量。没有解决我的问题。

我没有解决此问题的其他想法,所以我希望这里有人有想法:)

编辑:已授予 AndroidManifest 中的权限:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.siemens.poms">

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.NFC" />
    <uses-permission android:name="android.permission.INTERNET" />
....

我的问题是,当我返回到我的菜单屏幕时,我的 Webview 不会与 window 分离...所以..解决方案是将 Webview 从我的 [=17= 分离] 并重新加载...

我为此使用了 wv_map.destroy()...

也许有人会出现类似的错误。