Kotlin Load WebView 每次都无法正常工作
Posted
技术标签:
【中文标题】Kotlin Load WebView 每次都无法正常工作【英文标题】:Kotlin Load WebView is not working every time 【发布时间】:2021-11-25 14:51:51 【问题描述】:我目前有一个通常应该显示轨迹图的 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 Response 加载,为 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" />
....
【问题讨论】:
【参考方案1】:我的问题是,当我返回菜单屏幕时,我的 Webview 不会从窗口中分离出来......所以..解决方案是从我的窗口中分离 Webview 并重新加载......
我为此使用了 wv_map.destroy()...
也许有人会有类似的错误。
【讨论】:
以上是关于Kotlin Load WebView 每次都无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章
使用 Webview 将对象从 Javascript 发送到 Kotlin
如何使用 Android Kotlin 在 WebView 中加载 URL?
Android Kotlin WebView NullPointerException