如何在Kotlin中使用Volley正确解析这个JSON响应?

问题描述 投票:0回答:3

我在解析以下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新手,还想不出办法。

欢迎提供任何提示

android json kotlin android-volley
3个回答
2
投票

您可以使用"... 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)

1
投票

你到底在哪里初始化了 "category"?

我看到这里有2个可能的问题:1 -> categories只包含你最后的数据。(你可以看看是不是在 "类别 "之前添加:

Log.d("VolleyRequestResult", categories.toString()

就在

binding?.viewPagerMain?.adapter = BaseCategoriesFragmentPagerAdapter(
                    parentFragmentManager, categories)

2 -> 你的BaseCategoriesFragmentPagerAdapter只显示最后的数据(你应该分享这段代码,这样我们就能更好地了解发生了什么事)。

© www.soinside.com 2019 - 2024. All rights reserved.