android - 后台线程中的 UI 更改
问题描述
我有一个函数,当请求被执行并完成时,这个函数在后台线程中发送 http 请求我必须做些什么来解决这个问题
val url = "BASE_DIR/example"
val client = OkHttpClient()
val request = Request.Builder().url(url).build()
val code = client.newCall(request).execute().code()
if (code == 200) {
fragment.requireActivity().runOnUiThread {
fragment.refresh.isRefreshing = false
}
解决方案
向 UI 线程发送消息的另一种方法是使用Handler
Handler(Looper.getMainLooper()).post {
// do whatever
}
或者你有常用的postDelayed
方法等。所以你可以fragment
在不需要附加到的情况下更新它Activity
,这可能比只做一个空检查更好getActivity
(片段可能只是暂时分离,所以你仍然想更新它的状态所以你不会“失去”结果)。
如果您不介意丢失结果,因为您将分离的片段视为已死,因此不需要更新,那么像@rahat 的答案中的空检查是最简单的方法。不要让它变得比它需要的更复杂!
推荐阅读
- android - Flutter 项目中的任务“:app:processDebugResources”执行失败
- leaflet.markercluster - 如何将markercluster与已经聚集的数据一起使用?
- python - for循环中的os.system taskkill
- python - 我在为 Django 中的特定页面设置默认 URL 时遇到了一些问题
- text - 使用 sed 删除文本文件最后一行中的新行
- flutter - 运行我的颤振应用程序时终端中的消息
- python - 使用shutil和pandas df生成文件
- python - 找不到模块“libmultinest.dll”(或其依赖项之一)。尝试使用带有构造函数语法的完整路径
- macos - 将 zsh 提示更改为仅两个文件夹
- search - 如何将精简程序添加到 SharePoint 联机经典搜索页面