如何从 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 传输

ReactJS - 从 URL 获取 json 对象数据

如何保存从 PySpark 中的 URL 获取的 JSON 数据?

如何从php服务器获取json数据到android mobile

怎么提取json里的数据变成EXCEL?

jquery用ajax方式从后台获取json数据后如何将内容填充到下拉列表