[英]Android JSON to Kotlin Class with ViewHolder
我在使用由 Android Studio 的JSONToKotlinClass扩展生成的数据 class 时遇到问题。
所以我将这个JSON 转换为 kotlin 中的数据 class,生成的类是UserDataClass
, UserDataClassItem
, Geo
, Company
和Address
。
这是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.