我在解析以下JSON并将其保存在一个列表中时遇到了困难。
{
"statut": "Success",
"rubrique": [
{
"rubrique": "Accueil",
"position": "1"
},
{
"rubrique": "Films",
"position": "2"
},
{
"rubrique": "Séries",
"position": "3"
},
{
"rubrique": "Sketchs",
"position": "4"
},
{
"rubrique": "Musique",
"position": "5"
}
]
}
我试了好几种方法,然后下面的代码就成功了,只是我的列表只包含一个项目。Musique
val queue = Volley.newRequestQueue(activity)
val stringRequest = StringRequest(Request.Method.GET, endpoint,
Response.Listener<String> { response ->
val stringResponse = response.toString()
val jsonObj = JSONObject(stringResponse)
val jsonArray: JSONArray = jsonObj.getJSONArray("rubrique")
for (i in 0 until jsonArray.length()) {
val innerBlock: JSONObject = jsonArray.getJSONObject(i)
val item: RubriqueItem = RubriqueItem()
item.position = innerBlock.getString("position")
item.rubrique = innerBlock.getString("rubrique")
categories?.add(item)
}
binding?.viewPagerMain?.adapter = BaseCategoriesFragmentPagerAdapter(
parentFragmentManager, categories)
binding?.tabLayout?.setupWithViewPager(binding?.viewPagerMain)
},
Response.ErrorListener {error -> error.printStackTrace() })
queue.add(stringRequest)
categories是ArrayList,我需要把它传递给ViewPager的适配器。我试着想办法传递索引,但我是Kotlin新手,还想不出办法。
欢迎提供任何提示
您可以使用"... Gson lib来实现。
首先准备响应的数据类。
ApiResponse.kt。
data class Rubrique(
val rubrique: String,
val position: String
)
data class ApiResponse(
val statut: String,
val rubrique: List<Rubrique>
)
然后解析响应,你只需要一行:
val responseObject = Gson().fromJson(stringResponse, ApiResponse::class.java)
responseObject
就可以得到所有的信息. 而列表中的 responseObject.rubrique
.
你的代码应该在这之后。
val stringRequest = StringRequest(Request.Method.GET, endpoint,
Response.Listener<String> { response ->
val responseObject = Gson().fromJson(response.toString(), ApiResponse::class.java)
binding?.viewPagerMain?.adapter = BaseCategoriesFragmentPagerAdapter(
parentFragmentManager, responseObject.rubrique)
binding?.tabLayout?.setupWithViewPager(binding?.viewPagerMain)
},
Response.ErrorListener {error -> error.printStackTrace() })
queue.add(stringRequest)
你到底在哪里初始化了 "category"?
我看到这里有2个可能的问题:1 -> categories只包含你最后的数据。(你可以看看是不是在 "类别 "之前添加:
Log.d("VolleyRequestResult", categories.toString()
就在
binding?.viewPagerMain?.adapter = BaseCategoriesFragmentPagerAdapter(
parentFragmentManager, categories)
2 -> 你的BaseCategoriesFragmentPagerAdapter只显示最后的数据(你应该分享这段代码,这样我们就能更好地了解发生了什么事)。