【问题标题】:How to make data class of a JSON data if it is not having keys in Kotlin (Android studio)?如果在 Kotlin(Android 工作室)中没有密钥,如何制作 JSON 数据的数据类?
【发布时间】:2021-08-07 16:44:40
【问题描述】:
{
   "results" : [
      
        [ "5bcafde29600021147742e3a",
            "ljsdlfj",
           "ljdfl",
             "url",
             "title",
              15.2805
          ],

      [ "5bcafde29600021147742e3a",
            "ljsdlfj",
           "ljdfl",
             "url",
             "title",
              14.2805
          ],

        [ "5bcafde29600021147742e3a",
            "ljsdlfj",
           "ljdfl",
             "url",
             "title",
              13.2805
          ]
      ],
 "count": 53,
 "total": 53,
 "perpage": 10,
 "page": 0
                   }

  Although I tried making it using kotlin data class file from JSON - plugin but it resulted 
  like this - 
       
     data class store(
       val count: Int,
       val page: Int,
       val perpage: Int,
       val results: List<List<Any>>,
       val total: Int
                    )

看,这里它创建了 val results: List,我不明白如何在适配器中使用它。有什么办法可以解决吗? 希望您理解问题,如果您在获取 json 数据时遇到问题check here

这是我的适配器类,我需要将(Json 数据的)结果中的 url、标题和描述转换为 pDecp、pTitle 和 pImg。

class PatentAdapter(val context: Context, val patents: List<List<Any>>) :
RecyclerView.Adapter<PatentAdapter.PatentViewHolder>() {


override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PatentViewHolder {

    val view = LayoutInflater.from(context).inflate(R.layout.patent_item, parent, false)
    return PatentViewHolder(view)
}

override fun onBindViewHolder(holder: PatentViewHolder, position: Int) {
        val patentData : List<List<Patent>> = patents as List<List<Patent>>
    holder.pDecp.text =
    holder.pTitle.text =
  

}

override fun getItemCount(): Int {
    return patents.size
}

class PatentViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
    var pTitle = itemView.findViewById<TextView>(R.id.tv_patentTitle)
    var pDecp = itemView.findViewById<TextView>(R.id.tv_patentDescription)
    var pImg = itemView.findViewById<ImageView>(R.id.iv_patentImg)
}

}

【问题讨论】:

标签: json android-studio kotlin android-recyclerview android-adapter


【解决方案1】:

我想出了解决方案,如果你能在它对我有用的同时改进它,那就太好了 ->

数据类应该是这样的 ->

   data class Patent(
val count: Int,
val page: Int,
val perpage: Int,
val results: List<List<String>>,
val total: Int
 )

而在适配器类中,如果我们没有这样的键,我们必须占据数组或列表的位置 ->

    class PatentAdapter(val context: Context, val patents: Patent) :
RecyclerView.Adapter<PatentAdapter.PatentViewHolder>() {


override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PatentViewHolder {

    val view = LayoutInflater.from(context).inflate(R.layout.patent_item, parent, false)
    return PatentViewHolder(view)
}

override fun onBindViewHolder(holder: PatentViewHolder, position: Int) {
        val patentData : List<String> = patents.results[position]
    holder.pDecp.text = patentData[3]
    holder.pTitle.text = patentData[2]
    Glide.with(this.context).load(patentData[10].toString()).into(holder.pImg)


}

override fun getItemCount(): Int {
    return patents.results.size
}

class PatentViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
    var pTitle = itemView.findViewById<TextView>(R.id.tv_patentTitle)
    var pDecp = itemView.findViewById<TextView>(R.id.tv_patentDescription)
    var pImg = itemView.findViewById<ImageView>(R.id.iv_patentImg)
}

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-13
    • 1970-01-01
    • 1970-01-01
    • 2019-10-09
    • 1970-01-01
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多