如何从 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
}
}
如何从 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
}
}