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

How to get json data from url to Text Composable?

如何从 url 获取 json 并将其数据添加到 Jetpack Compose 中的文本可组合项

这是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)
}

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

然后从您的文本可组合项中通过视图模型访问此变量。像普通字符串一样更新此变量将触发重组

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

虽然没有必要将其存储在视图模型中,但这是推荐的最佳做法。您还可以将状态存储在您的正常 activity class 甚至使用 remember 的可组合项中(不推荐用于重要的状态存储)

但是,对于 viewmodel,我的意思是,

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

然后,在您的 activity、

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