如何从 url 获取 json 数据到 Text Composable?
Posted
技术标签:
【中文标题】如何从 url 获取 json 数据到 Text Composable?【英文标题】:How to get json data from url to Text Composable? 【发布时间】:2021-09-20 11:57:09 【问题描述】:如何从 url 获取 json 并将其数据添加到 Jetpack Compose 中的 Text Composable
这里是json文件 https://jsonplaceholder.typicode.com/posts
@Composable
fun Api()
val queue = Volley.newRequestQueue(LocalContext.current)
val url = "https://jsonplaceholder.typicode.com/posts"
val jsonObjectRequest = JsonObjectRequest(
Request.Method.GET, url,null,
response ->
val title = response.getString("title")
print(title)
,
error ->
print(error.localizedMessage)
)
queue.add(jsonObjectRequest)
【问题讨论】:
【参考方案1】:只需在视图模型中获取您想要的数据即可。然后,将其存储在一个变量中,例如var data by mutableStateOf("")
然后通过您的文本 Composable 中的视图模型访问此变量。像普通字符串一样更新此变量将触发重组
根据以下评论进行编辑:-
虽然没有必要将其存储在视图模型中,但这是推荐的最佳做法。您还可以使用remember
将状态存储在您的正常活动类甚至可组合对象中(不推荐用于重要状态存储)
但是,我所说的视图模型只是指,
class mViewModel: ViewModel()
var data by mutableStateOf("")
private set //only viewmodel can modify values
fun onLoadData()
data = //json extraction logic
fun onDataChange(newData: String)
data = newData
那么,在你的活动中,
class mActiviry: AppCompatActivity()
val vm by viewmodels<mViewModel>() //See docs for better approaches of initialisation
//...
setContent
Text(vm.data)
完成
编辑:-
或者,放弃onDataLoad()
class mViewModel: ViewModel()
var data by mutableStateOf("")
private set //only viewmodel can modify values
init
data = // code from the "Api" method in your question
fun onDataChange(newData: String)
data = newData
【讨论】:
其实我正在学习 Jetpack Compose 和 Kotlin,所以我对 viewmodel 不太了解。我设法进行了 API 调用并记录了数据,但我不了解 viewmodel,所以请你举一些 viewmodel 的例子。 我已在问题中添加了我的 api 逻辑,请查看它,我想知道如何将输出数据添加到 Text Composable 您真的应该阅读文档先生。您正在为常规函数使用@Composable
注释...?你知道如何将你想要的东西提取到一个字符串中吗?
如果可以,请将此逻辑移至视图模型中的 onLoadData()
方法。然后将字符串分配给同一方法内的data
变量。如果您想问“如何从 url 中提取字符串”,那将是一个单独的问题,带有单独的标签
好的。您也可以放弃onLoadData()
方法。相反,创建一个init
块并将提取逻辑移动到该点。例如,在您的视图模型中,使用这个以上是关于如何从 url 获取 json 数据到 Text Composable?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 AngularJS 从外部 URL 获取 JSON 并在页面中显示 - 资源解释为脚本但使用 MIME 类型 text/html 传输
如何保存从 PySpark 中的 URL 获取的 JSON 数据?