Android 如何在Kotlin中使用截取正确解析此JSON响应
我很难解析以下JSON并将其保存在列表中Android 如何在Kotlin中使用截取正确解析此JSON响应,android,json,kotlin,android-volley,Android,Json,Kotlin,Android Volley,我很难解析以下JSON并将其保存在列表中 { "statut": "Success", "rubrique": [ { "rubrique": "Accueil", "position": "1" }, { "rubrique": "Films", "position": "2" }, { "rubrique": "Séries", "position": "3" },
{
"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。我试图找出一种通过索引的方法,但我是科特林的新手,现在还不知道
欢迎任何提示您在哪里初始化类别的 我在这里看到两个可能的问题: 1->类别仅包含您的最后数据。您可以看到是否添加了以下内容:
Log.d("VolleyRequestResult", categories.toString()
就在之前
binding?.viewPagerMain?.adapter = BaseCategoriesFragmentPagerAdapter(
parentFragmentManager, categories)
2->您的基本分类FragmentPageRadapter仅显示您应该共享此代码的最后一个数据,以便我们更好地了解发生了什么事情您在哪里初始化了分类 我在这里看到两个可能的问题: 1->类别仅包含您的最后数据。您可以看到是否添加了以下内容:
Log.d("VolleyRequestResult", categories.toString()
就在之前
binding?.viewPagerMain?.adapter = BaseCategoriesFragmentPagerAdapter(
parentFragmentManager, categories)
2->BaseCegories Fragments PageRadapter只显示您应该共享此代码的最后一个数据,以便我们更好地了解正在发生的事情您可以使用lib来实现这一点
首先为响应准备数据类
ApiResponse.kt:
data class Rubrique(
val rubrique: String,
val position: String
)
data class ApiResponse(
val statut: String,
val rubrique: List<Rubrique>
)
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)
你可以用lib
首先为响应准备数据类
ApiResponse.kt:
data class Rubrique(
val rubrique: String,
val position: String
)
data class ApiResponse(
val statut: String,
val rubrique: List<Rubrique>
)
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)
如下所示:私有变量类别:ArrayList?=ArrayList。适配器很好,它只需将每个项目分配到选项卡并从类别大小获取项目计数,如下所示:private var categories:ArrayList?=ArrayList。适配器很好,它只需将每个项分配到选项卡,并从categories sizeThanks获取该解决方案的项计数,但是私有变量categories:ArrayList中的json是什么ArrayList?在这一行之后,您将所有的列表作为responseObject.rubrique列表,每个元素都有rubrique和position属性,Hanks肯定会使用这种方法。谢谢,我认为kotlinx.serialization对于这个目的来说更好,因为它不使用反射,因此速度更快。我建议通过Gson来减少模板和提高性能@lyraw您介意提供一个我可以遵循的示例吗?感谢这个解决方案,但是私有变量类别中的json是什么:ArrayList?=ArrayList?在这一行之后,您将所有的列表作为responseObject.rubrique列表,每个元素都有rubrique和position属性,Hanks肯定会使用这种方法。谢谢,我认为kotlinx.serialization对于这个目的来说更好,因为它不使用反射,因此速度更快。我建议使用Gson来减少模板和提高性能@lyraw您介意提供一个我可以遵循的示例吗?