繁体   English   中英

Android JSON 到 Kotlin Class 带 ViewHolder

[英]Android JSON to Kotlin Class with ViewHolder

我在使用由 Android Studio 的JSONToKotlinClass扩展生成的数据 class 时遇到问题。

所以我将这个JSON 转换为 kotlin 中的数据 class,生成的类是UserDataClassUserDataClassItemGeoCompanyAddress

这是UserDataClass的样子:

package com.example.kotlinretrofitexample

class UserDataClass : ArrayList<UserDataClassItem>()

这就是UserDataClassItem的样子:

package com.example.kotlinretrofitexample

import com.google.gson.annotations.SerializedName

data class UserDataClassItem(
    @SerializedName("id")
    var id: Int,
    @SerializedName("name")
    var name: String,
    @SerializedName("username")
    var username: String,
    @SerializedName("email")
    var email: String,
    @SerializedName("address")
    var address: Address,
    @SerializedName("phone")
    var phone: String,
    @SerializedName("website")
    var website: String,
    @SerializedName("company")
    var company: Company
)

所以我想做的是用 RecyclerView 显示这些数据。 这是我创建的适配器:

class UserAdapter(private val data: List<UserDataClass>?) : RecyclerView.Adapter<UserAdapter.MyHolder>(){

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyHolder {
    val v = LayoutInflater.from(parent.context).inflate(R.layout.item_user, parent, false)
    return MyHolder(v)
}

override fun getItemCount(): Int = data?.size ?: 0

override fun onBindViewHolder(holder: MyHolder, position: Int) {
    holder.bind(data?.get(position))
}

class MyHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
    fun bind(get: UserDataClass?) {
        itemView.nama.text = get?.name
        itemView.email.text = get?.email
        itemView.notelp.text = get?.phone
        val address = "${get?.address?.street}, ${get?.address?.city}, ${get?.address?.suite}, ${get?.address?.zipcode}"
        itemView.alamat.text = address
    }
}

}

构建时,返回错误消息:

Unresolved reference. None of the following candidates is applicable because of receiver type mismatch:

Unresolved reference: name

Unresolved reference: phone

Unresolved reference: address

我错过了什么?? 如果有不清楚的地方,请告诉我!

编辑

这是Address class:

data class Address(
    @SerializedName("street")
    var street: String,
    @SerializedName("suite")
    var suite: String,
    @SerializedName("city")
    var city: String,
    @SerializedName("zipcode")
    var zipcode: String,
    @SerializedName("geo")
    var geo: Geo
)

这是针对Company Class的:

data class Company(
    @SerializedName("name")
    var name: String,
    @SerializedName("catchPhrase")
    var catchPhrase: String,
    @SerializedName("bs")
    var bs: String
)

这是针对Geo class 的:

data class Geo(
    @SerializedName("lat")
    var lat: String,
    @SerializedName("lng")
    var lng: String
)

我相信你得到的是UserDataClassItem而不是UserDataClass

所以在构造函数中将UserDataClassItem传递给您的适配器 class 。

class UserAdapter(private val data: List< UserDataClassItem >?) : RecyclerView.Adapter<UserAdapter.MyHolder>(){

 //change accordingly

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM