列表未在android WebView中正確迭代

我有一個Url列表,我想迭代列表以加載其中的每一個,但當嘗試這樣做時,迭代失敗,它只加載列表的最后一項。

最初,當WebView首次開始運行時,會加載此url:

webView.loadUrl("https://translate.google.com/?sl=$from&tl=$into&text=Hello&op=translate")

我有一個URL列表,我想對它們進行迭代:

 val items = listOf(
        "https://translate.google.com/?sl=$from&tl=$into&text=First text&op=translate",
        "https://translate.google.com/?sl=$from&tl=$into&text=Second text&op=translate",
        "https://translate.google.com/?sl=$from&tl=$into&text=Third text&op=translate"
    )

頁面加載完成后,我在列表上迭代以加載每個url:

webView.webViewClient = object : WebViewClient() {
            override fun onPageFinished(view: WebView?, url: String?) {
                super.onPageFinished(view, url)
                GlobalScope.launch {
                    delay(5000)
                    withContext(Dispatchers.Main) {
                        items.forEach {
                            view?.loadUrl(it)
                            injectJavascript(view)
                        }
                    }
                }
            }
        }

我只得到最后一個Url的結果,即“第三個文本”,有什么問題?我該如何使代碼正常工作?

? 最佳回答:

您所面臨的問題是由于WebView的loadUrl()函數(shù)異步操作。當您在forEach循環(huán)中調用loadUrl()時,它會啟動URL的加載,但不會等待頁面完成加載后再繼續(xù)下一個URL。因此,循環(huán)快速迭代所有URL,只有最后一個URL有機會完全加載,這就是為什么您只看到最后一個網(wǎng)址的結果。

要處理此問題,您可以使用queue-like方法,即只有在當前URL完成加載時才加載下一個URL。

For instance:

val items = mutableListOf(
    "https://translate.google.com/?sl=$from&tl=$into&text=First text&op=translate",
    "https://translate.google.com/?sl=$from&tl=$into&text=Second text&op=translate",
    "https://translate.google.com/?sl=$from&tl=$into&text=Third text&op=translate"
)

var isLoading = false

webView.webViewClient = object : WebViewClient() {
    override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
        super.onPageStarted(view, url, favicon)
        isLoading = true
    }

    override fun onPageFinished(view: WebView?, url: String?) {
        super.onPageFinished(view, url)
        isLoading = false
    }
}

val handler = Handler(Looper.getMainLooper())
val runnable = object : Runnable {
    override fun run() {
        if (!isLoading && items.isNotEmpty()) {
            val nextUrl = items.removeAt(0)
            webView.loadUrl(nextUrl)
            injectJavascript(webView)
        }
        handler.postDelayed(this, 5000)
    }
}
handler.post(runnable)

在本修訂規(guī)范中:

這里,onPageStartedonPageFinished用于維護一個標志isLoading,該標志指示W(wǎng)ebView當前是否正在加載頁面。runnable對象檢查此標志,如果WebView當前沒有加載頁面,它將開始加載下一個URL。這個runnable對象每5秒被發(fā)布到Handler

這樣,只有當WebView當前未加載頁面時,才會加載下一個URL。

主站蜘蛛池模板: 国模大尺度视频一区二区| 日本免费一区二区三区| 国产无套精品一区二区 | 亚洲无码一区二区三区| 夜夜精品无码一区二区三区| 成人区精品一区二区不卡亚洲| 熟女精品视频一区二区三区| 天天爽夜夜爽人人爽一区二区| 成人区人妻精品一区二区三区| 亚洲中文字幕一区精品自拍| 骚片AV蜜桃精品一区| 国产精品视频一区二区噜噜| 国产日韩AV免费无码一区二区 | 色一乱一伦一区一直爽| 无码视频一区二区三区| 无码丰满熟妇浪潮一区二区AV| 91久久精品一区二区| 人妻久久久一区二区三区| 色欲AV蜜臀一区二区三区| 亚洲一区二区三区免费观看| 日韩精品无码免费一区二区三区 | 中字幕一区二区三区乱码| 亚洲天堂一区二区三区四区| 搡老熟女老女人一区二区| 亚洲一区二区三区免费在线观看 | 日本一区二区三区在线网| 精品无码中出一区二区| 亚洲AV无码一区二区三区国产| 亚洲视频在线一区二区| 国精产品一区二区三区糖心| 国产免费一区二区三区在线观看| 国产伦理一区二区| 亚洲电影唐人社一区二区| 日韩av片无码一区二区不卡电影| 日本香蕉一区二区三区| 久久久久人妻一区精品| 亚洲国产成人一区二区三区 | 香蕉久久AⅤ一区二区三区| 国产亚洲一区二区三区在线不卡 | 国产在线精品一区二区夜色| 日本不卡在线一区二区三区视频 |