无法将json数组填充到数组列表android开发

Posted

技术标签:

【中文标题】无法将json数组填充到数组列表android开发【英文标题】:Cant fill json array to array list android development 【发布时间】:2022-01-16 20:47:18 【问题描述】:

我试图将 json 数组从我的 web 发送到一个带有 volley 库的类中的数组列表中

这是我要填充的数组

我想用来自网络的数据替换函数 getBestSelling() 中的虚拟数据

Filename = DummyDataSource.kt(它只是普通的 kotlin 类)

fun getBestSelling(): Observable<ArrayList<ProductEntity>> 

        val dummy1 = ProductEntity(name = "Bell Pepper Red", description = "1kg, Priceg",
            price = 20000,
            picture = R.drawable.iv_pepper_red,
            id = 5
        )
        val dummy2 = ProductEntity(name = "Beef bone", description = "1kg, Priceg",
            price = 25000,
            picture = R.drawable.iv_beef_bone,
            id = 6
        )
        val dummy3 = ProductEntity(name = "Boiler Chicken", description = "1kg, Priceg",
            price = 15000,
            picture = R.drawable.iv_boiler_chicken,
            id = 7
        )
        val dummy4 = ProductEntity(name = "Ginger", description = "250gm, Priceg",
            price = 22000,
            picture = R.drawable.iv_ginger,
            id = 4
        )

        val data = listOf(dummy1, dummy2, dummy3, dummy4)
        return Observable.just(ArrayList(data))

这是我为填充数组所做的工作

fun getBestSelling(): Observable<ArrayList<ProductEntity>> 
var url:String="http:// 192.168.56.1/toko-online/mobile/pro_kategori.php"
        var rq : RequestQueue = Volley.newRequestQueue(this)
        var data = ArrayList<ProductEntity>()
        var js = JsonArrayRequest(Request.Method.GET,url,null, Response.Listener response ->
            for (x in 0..response.length()-1)
                data.add(ProductEntity(response.getJSONObject(x).getInt("id"),
                    response.getJSONObject(x).getInt("id"),response.getJSONObject(x).getString("name"),
                    response.getJSONObject(x).getString("url"),response.getJSONObject(x).getString("description"),
                    response.getJSONObject(x).getInt("price"),response.getJSONObject(x).getInt("stock"),
                    response.getJSONObject(x).getInt("category_id")))
            
        , Response.ErrorListener  error ->
            Toast.makeText(this,error.message,Toast.LENGTH_LONG).show()
        )
        rq.add(js)
        return Observable.just(data)

错误来自行“ var rq : RequestQueue = Volley.newRequestQueue(this)” 它说

“类型不匹配:推断的类型是 DummyDataSource 但 Context! 是预期的”

所以我复制了这段代码

fun getdata(): Observable<ArrayList<ProductEntity>> 
var url:String="http:// 192.168.56.1/toko-online/mobile/pro_kategori.php"
        var rq : RequestQueue = Volley.newRequestQueue(this)
        var data = ArrayList<ProductEntity>()
        var js = JsonArrayRequest(Request.Method.GET,url,null, Response.Listener response ->
            for (x in 0..response.length()-1)
                data.add(ProductEntity(response.getJSONObject(x).getInt("id"),
                    response.getJSONObject(x).getInt("id"),response.getJSONObject(x).getString("name"),
                    response.getJSONObject(x).getString("url"),response.getJSONObject(x).getString("description"),
                    response.getJSONObject(x).getInt("price"),response.getJSONObject(x).getInt("stock"),
                    response.getJSONObject(x).getInt("category_id")))
            
        , Response.ErrorListener  error ->
            Toast.makeText(this,error.message,Toast.LENGTH_LONG).show()
        )
        rq.add(js)
        return Observable.just(data)

进入主活动中的oncreate。但正因为如此,我无法在 DummyDataSource.kt 中的 getBestSelling() 中填充数组,因为函数 getdata() 仅将数据返回到 oncreate

有什么方法可以让数据进入 DummyDataSource.kt 中的 getBestSelling() 吗?

【问题讨论】:

this 替换为 requireContext() 你可以找到一大堆解释为什么this 不适用于上下文的帖子,所以如果你没有阅读它们或者不明白它是如何工作的,请避免使用它并改用 requireContext 之类的东西 好的,但现在它询问提供者..? @IrvanMuhandis 你从哪里调用方法getBestSelling()?您应该将 Context 作为参数传递给该方法并在请求中使用它:fun getBestSelling(ctx: Context) var rq : RequestQueue = Volley.newRequestQueue(ctx) ... 【参考方案1】:

将您的函数移出 onCreate 并将“this”替换为上下文引用(requreContext() 或在 onCreate 中创建 Context var 以引用)

【讨论】:

仍然错误...它说我需要提供者。我该怎么办

以上是关于无法将json数组填充到数组列表android开发的主要内容,如果未能解决你的问题,请参考以下文章

一起学Android之ListView

Android:使用数组项填充列表视图

通过 JSON 将背景图像填充到列表视图项中的问题

我如何解析 JSON,将其排序为数组。提取数据并填充到表格视图中?

如何获取json数组中子数组的值

EXTJS 4 嵌套 json 数组数据到网格面板