我正在使用JSoup来解析一个网站(我不得不将其设置为使用明文请求,因为不支持HTTPS).它是在Runnable,以避免阻塞网络主线程.但是,当我运行我的代码时,它似乎不显示.我怀疑它与activity有关(因为我在设置它时遇到了问题),并且我使用的是内部类,但没有返回任何错误或警告.我做错了什么?

package com.example.investmenthuntermobile


import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TableRow
import android.widget.TextView
import androidx.fragment.app.Fragment
import com.example.investmenthuntermobile.databinding.InsiderFragmentBinding
import org.jsoup.Jsoup


class InsiderFragment : Fragment() {

    private lateinit var binding: InsiderFragmentBinding


    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        binding = InsiderFragmentBinding.inflate(layoutInflater)
        return binding.root
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        setupData()

    }

    private fun setupData() {
        val thread = Thread(Task()).start()
    }


    inner class Task() : Runnable {

        override fun run() {
            val doc = Jsoup.connect("http://openinsider.com/search?q=GME").get()
            val table = doc.select(".tinytable")
            // Get the table header cells
            val tableHeaderRow = TableRow(activity)
            tableHeaderRow.isClickable = true
            table.select("thead").select("tr").forEach {row ->
                row.getElementsByTag("th").forEach { cell ->
                Log.d("CELL text", cell.text())
                val textView = TextView(activity)
                textView.text = cell.text()
                tableHeaderRow.addView(textView)

                }
            }
            // Get the table body cells
            table.select("tbody").select("tr").forEach {row ->
                val tableRow = TableRow(requireActivity())
                tableRow.isClickable = true

                row.getElementsByTag("td").forEach { cell ->
                    val textView = TextView(activity)
                    textView.text = cell.text()
                    tableRow.addView(textView)
                }
            }
        }

    }

}

推荐答案

这就是如何使用协程在后台线程上正确地完成openinsiderGetData()项工作.

private fun setupData() {
    lifecycleScope.launch {
        withContext(Dispatchers.Default) {
            openinsiderGetData()
        }

        for (row in data) {
            val tableRow = TableRow(activity)
            tableRow.isClickable = true
            for (cell in row) {
                val textView = TextView(activity)
                textView.text = cell
                tableRow.addView(textView)
            }
            binding.table.addView(tableRow)
        }
    }
}

Android相关问答推荐

在画布上画直线

更新画布上的绘图以具有水平填充

Android设备.Net Maui上的mp3文件列表

Jetapck Compose:将Compose BOM更新为最新版本&2024.01.00&Quot;CircularProgressIndicator后出现错误

如何在初始合成期间在可组合函数中调用/获取远程API中的数据[防止无限重组]

Android从已连接的设备获得GATT

如何用帆布在喷气背包中画一个圆环?

使用 settings.gradle 文件将 Firebase 依赖项添加到 Android 项目

如何删除 Jetpack Compose 中按钮的左边框?

我如何比较多个时间范围并在 Android Compose 中并排显示它们

我该怎么做文本计时器

在移动设备上看到时如何增加 PasswordField 文本?

react 从输入中找到路径'lib/arm64-v8a/libfbjni.so'的本机2个文件

状态值更改时屏幕未重新组合 - Jetpack Compose

无法使用 Gradle 托管设备对基线配置文件运行测试

android 13 版本是否会影响 android 12 目标应用程序

如何在 Compose 中更改高程 colored颜色 ?

compose FontFamily 错误:必须初始化变量

更新应用程序是否会取消对应用程序特定文件的权限?

等到上一个事件完成 Rx