Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在Kotlin中使用截取正确解析此JSON响应_Android_Json_Kotlin_Android Volley - Fatal编程技术网

Android 如何在Kotlin中使用截取正确解析此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" },

我很难解析以下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。我试图找出一种通过索引的方法,但我是科特林的新手,现在还不知道


欢迎任何提示

您在哪里初始化类别的

我在这里看到两个可能的问题: 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您介意提供一个我可以遵循的示例吗?