无法将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开发的主要内容,如果未能解决你的问题,请参考以下文章