簡體   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