java.lang.ClassCastException: cn.leancloud.LCObject cannot be cast to com.example.secondhandtest.Goods

这是查询的方法

    fun SearchAllGoods(recyclerView:RecyclerView){

        val query:LCQuery<Goods> =LCQuery("Goods")
    query.findInBackground().subscribe(object :Observer<List<Goods>>{
        override fun onSubscribe(d: Disposable) {

        }

        override fun onNext(t: List<Goods>) {
            if (t!=null){
                val list = t
                if (list!=null && list.size>0){
                    GoodsList=list
                    Log.e(TAG, "查询成功"+list, )
                    //
                    GoodsAdapter=GoodsAdapter(GoodsList)
                    recyclerView.adapter=GoodsAdapter
                    Log.e(TAG, "SearchGoods", )
                    Log.e(TAG, ""+GoodsList, )
        }
            }
        }

        override fun onError(e: Throwable) {

        }

        override fun onComplete() {

        }

    })}

这是recyclerview 绑定视图的方法,程序运行到//todo 报错就不运行了

    override fun onBindViewHolder(holder: GoodsAdapter.ViewHolder, position: Int) {
        Log.e(TAG, "GoodsAdapter绑定数据", )
        //todo 报错
        val goods: Goods? =goodsList?.get(position)
        Log.e(TAG, "GoodsAdapter获取对应的数据", )
holder.GoodsName.text=goods?.GoodsTitle
        holder.GoodsMonehy.text= goods?.GoodsMoney.toString()
        holder.GoodsMessage.text=goods?.GoodsMessage
        val user:User= LCUser.getCurrentUser(User::class.java)

        holder.GoodsUser.text=user.username

}

这是我Goods的实体类

class Goods: LCObject() {
    @SerializedName("GoodsTitle")
    var GoodsTitle:String=""
    @SerializedName("GoodsMessage")
    var GoodsMessage:String=""
    @SerializedName("GoodsMoney")
    var GoodsMoney:Int=0

    var GoodsUser: User? =null
@SerializedName("image")
var image: BmobFile?=null
}

这是我用户的实体类

package com.example.secondhandtest

import cn.leancloud.LCUser

class User : LCUser(){
    var UserName:String=""
    var UserPassWord:String=""
var usermoney:Int=0
}

在查询方法里,能成功的返回数据
[{"className":"Goods","serverData":{"GoodMoney":15,"GoodsTitle":"蔡徐坤","createdAt":"2022-08-31T09:50:17.482Z","GoodsUser":{"className":"_User","serverData":{"objectId":"630f266f747f46052d2517e7"}},"GoodsMessage":"鸡你太美","objectId":"630f2ed9c4ae9e05acbef20a","updatedAt":"2022-08-31T09:50:52.237Z"}}]

但是在适配器赋值的时候提示类型错误,请问怎么解决?

你好,可以打印下adapate中onBindViewHolder方法中传的
val goods: Goods? =goodsList?.get(position)这个goodsLIst变量的值和他类型吗?

或者如果方便可以提供下你这个功能的小demo,我们直接看代码进行排查下

你好,我这边根据你提供的代码和逻辑写了demo复现了你的问题,你可以按照如下操作进行解决:
1、获取数据时直接获取LCObject对象,代码如下:

val query = LCQuery("Goods")
query.findInBackground().subscribe(object : Observer?> {
override fun onSubscribe(d: Disposable) {
Log.e(TAG, "查询onSubscribe: "+d.toString())
}
override fun onNext(t: List) {
Log.e(TAG, "查询onNext: "+t.toString() )
if (t.isNotEmpty()){
Log.e(TAG, "查询成功"+t.toString() )
var goodsRecycleAdapter =GoodsRecycleAdapter()
var linear = LinearLayoutManager(this@MainActivity, LinearLayoutManager.VERTICAL, false)
good_recycle.layoutManager = linear
good_recycle.adapter = goodsRecycleAdapter
goodsRecycleAdapter.addData(t as List)

                }
            }
            override fun onError(e: Throwable) {
                Log.e(TAG, "查询onError: "+e.toString() )
            }
            override fun onComplete() {
                Log.e(TAG, "查询onComplete: ")
            }

        })

2、adapter中绑定数据时,先通过LCObject对象获取serverData属性的值,这是一个HashMap类型数据,然后根据Key就可以获取到值,代码如下:

class MyViewHolder(private var view: View) : RecyclerView.ViewHolder(view) {
var GoodName: TextView = view.GoodsName
var GoodsMonehy: TextView = view.GoodsMonehy
var GoodsMessage: TextView = view.GoodsMessage

    fun setData(goods: LCObject) {
        GoodName.text = (goods.serverData)["GoodsTitle"].toString()
        GoodsMonehy.text = (goods.serverData)["GoodMoney"].toString()
        GoodsMessage.text = (goods.serverData)["GoodsMessage"].toString()
    }

}

详细代码可参考附件:
归档.zip1 (3.1 KB)