【问题标题】:How to create a generic datatype to access a inner parameter of a Json Response如何创建通用数据类型以访问 Json 响应的内部边界
【发布时间】:2021-07-25 05:53:41
【问题描述】:

如果您查看 ENERC_KCAL、FAT、FASAT、FAMS 下面的代码,它们都具有相同的 3 个参数 labelquantityunit时间>。我想在我的 RecyclerAdapter 中设置标签和数量值以填充 recylerView。

"totalNutrients":{
   "ENERC_KCAL":{
      "label":"Energy",
      "quantity":2493.0949190757847,
      "unit":"kcal"
   },
   "FAT":{
      "label":"Fat",
      "quantity":2.275,
      "unit":"g"
   },
   "FASAT":{
      "label":"Saturated",
      "quantity":0.0665,
      "unit":"g"
   },
   "FAMS":{
      "label":"Monounsaturated",
      "quantity":0.224,
      "unit":"g"
   }
}

但是,在我的数据类中,正在创建 ENERC_KCAL、FAT、FASAT、FAMS 类型的单个对象(我正在使用 Json 到 Kotlin 类插件),格式如下



                    data class ENERCKCAL(
                    @SerializedName("label")
                    val label: String?,
                    @SerializedName("quantity")
                    val quantity: Double?,
                    @SerializedName("unit")
                    val unit: String?
                )

                data class FAT(
                    @SerializedName("label")
                    val label: String?,
                    @SerializedName("quantity")
                    val quantity: Double?,
                    @SerializedName("unit")
                    val unit: String?
                )

                data class FASAT(
                    @SerializedName("label")
                    val label: String?,
                    @SerializedName("quantity")
                    val quantity: Double?,
                    @SerializedName("unit")
                    val unit: String?
                )

有没有办法生成一个 GenericClass 来访问标签和数量值,或者我如何访问当前结构中的值?

【问题讨论】:

    标签: android json android-recyclerview retrofit


    【解决方案1】:

    如果你想在 recyclerview 中显示你的数据,试试这个:

      data class TotalNutrients(@SerializedName("ENERC_KCAL")val enerc:Nutrient, @SerializedName("FAT")val fat:Nutrient, @SerializedName("FASAT")val fasat:Nutrient, @SerializedName("FAMS")val fams:Nutrient) {
    
            data class Nutrient(@SerializedName("label")
                                val label: String?,
                                @SerializedName("quantity")
                                val quantity: Double?,
                                @SerializedName("unit")
                                val unit: String?
            )
            
            fun getArrayList():ArrayList<Nutrient>{
                return arrayListOf(enerc,fat,fasat,fams)
            }
    
        }
    

    现在您可以使用 getArrayList() 来填充回收站视图

    【讨论】:

    【解决方案2】:

    如果您有很多相似的数据类,对于同样的问题有更好的解决方案。

    data class Nutrient(@SerializedName("label")
                                val label: String?,
                                @SerializedName("quantity")
                                val quantity: Double?,
                                @SerializedName("unit")
                                val unit: String?
            )
    
    

    并在上层数据类中将其定义为

    val valuesOfNutrients:Map&lt;String, Nutrient&gt;

    然后您可以使用valuesOfNutrients.value 访问所有元素,而无需中间数据类

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-07
      • 2014-01-08
      • 2020-02-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多