[英]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.