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.
相关产品推荐
相关产品推荐

