如何使用 Kotlin 中的 Volley 正确解析此 JSON 响应
How to properly parse this JSON response with Volley in Kotlin
我很难尝试解析以下 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 是我需要传递给 ViewPager 适配器的 ArrayList。试图找出一种传递索引的方法,但我是 Kotlin 的新手,还无法弄清楚
欢迎任何提示
您具体在哪里初始化 "categories"?
我在这里看到 2 个可能的问题:
1 -> 类别仅包含您的最后数据。 (你可以看看是否是添加:
Log.d("VolleyRequestResult", categories.toString()
就在
之前
binding?.viewPagerMain?.adapter = BaseCategoriesFragmentPagerAdapter(
parentFragmentManager, categories)
2 -> 你的 BaseCategoriesFragmentPagerAdapter 只显示最后的数据(你应该分享这段代码,这样我们才能更好地理解发生了什么)
您可以为此使用 Gson 库。
首先准备响应的数据class。
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)
我很难尝试解析以下 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 是我需要传递给 ViewPager 适配器的 ArrayList。试图找出一种传递索引的方法,但我是 Kotlin 的新手,还无法弄清楚
欢迎任何提示
您具体在哪里初始化 "categories"?
我在这里看到 2 个可能的问题: 1 -> 类别仅包含您的最后数据。 (你可以看看是否是添加:
Log.d("VolleyRequestResult", categories.toString()
就在
之前binding?.viewPagerMain?.adapter = BaseCategoriesFragmentPagerAdapter(
parentFragmentManager, categories)
2 -> 你的 BaseCategoriesFragmentPagerAdapter 只显示最后的数据(你应该分享这段代码,这样我们才能更好地理解发生了什么)
您可以为此使用 Gson 库。
首先准备响应的数据class。
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)