如何从 url 获取 json 数据到 Text Composable?

时间:2021-07-10 13:53:05

标签: android json android-volley android-jetpack-compose

如何从 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 个答案:

答案 0 :(得分:0)

只需在视图模型中获取您想要的数据即可。然后,将其存储在一个变量中,例如 var data by mutableStateOf("")

然后通过文本 Composable 中的视图模型访问此变量。像普通字符串一样更新这个变量会触发重组

根据以下评论进行编辑:-

虽然没有必要将其存储在视图模型中,但这是推荐的最佳实践。您还可以使用 remember(不推荐用于重要状态存储)

将状态存储在普通 Activity 类甚至可组合中

但是,对于视图模型,我的意思是,

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
}
 
}