You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android新手求助:从URL取文本并显示为ListView失败

问题修复方案

你的代码存在三个关键问题,修改后即可正常运行:

  • 变量作用域错误:songList是子线程Lambda内部的局部变量,外部代码无法访问。必须将UI更新逻辑移到变量可访问的范围内,或者通过主线程回调传递数据。
  • UI操作未在主线程执行:Android要求所有更新UI的操作(如给ListView设置Adapter)必须在主线程完成,直接在子线程外执行会导致崩溃。
  • 换行符写法错误:split(" ")的写法无效,需改为split("\n")来匹配文本中的换行分隔符。

修改后的完整代码(采用Coroutine,更符合现代Android开发规范)

private fun getSongList() {
    // 开启IO线程执行网络请求
    lifecycleScope.launch(Dispatchers.IO) {
        val songList = URL("https://vivalaresistance.ru/radio/stuff/vlrradiobot.php?type=getPlaylist")
            .readText(Charset.forName("windows-1251"))
            .replace("й", "й")
            .replace("Й", "Й")
            .split("\n")
            .filter { it.isNotBlank() } // 过滤空行,避免ListView出现无效条目
            .toTypedArray()

        // 切换回主线程更新UI
        withContext(Dispatchers.Main) {
            val list = view?.findViewById<ListView>(R.id.list)
            val arrayAdapter = ArrayAdapter(requireActivity(), android.R.layout.simple_list_item_1, songList)
            list?.adapter = arrayAdapter
        }
    }
}

必要的配置补充

  • 确保AndroidManifest.xml中添加网络权限:
    <uses-permission android:name="android.permission.INTERNET"/>
    

内容的提问来源于stack exchange,提问作者Mikhail K.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 19:26:15