Firebase - 无法将 java.lang.String 类型的对象转换为 com.example.myapplication.Message 类型

问题描述 投票:0回答:1

我想在我的应用程序中实现

RecyclerView
以及 Firebase。我有一个简单的 firebase 结构:

消息节点下的密钥是通过参考

.push()
随机生成的。这些值只是一些虚拟消息。

型号

data class Message (val message: String? = null)

主要活动

    private lateinit var mAdapter: MessageAdapter
    ...

    myRef = FirebaseDatabase.getInstance().getReference("Message")

    //Set database query
    val messages = FirebaseRecyclerOptions.Builder<Message>()
        .setQuery(myRef, Message::class.java)
        .build()

    mAdapter = MessageAdapter(messages)

    //Read data
    val rv = findViewById<RecyclerView>(R.id.messages_rv)
    rv.layoutManager = LinearLayoutManager(this)
    rv.adapter = mAdapter

适配器

    class MessageAdapter(messages: FirebaseRecyclerOptions<Message>) :
    FirebaseRecyclerAdapter<Message, MessageAdapter.ViewHolder>(messages) {

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        return ViewHolder(
            LayoutInflater.from(parent.context).inflate(R.layout.message_row, parent, false)
        )
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int, model: Message) {
        holder.message.text = model.message
    }

    // Make a textview variable, and initiate it in the init block, which will be called first after creating the ViewHolder object
     class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
        val message: TextView = view.findViewById(R.id.message_tv)
    }
}

不幸的是,我的应用程序因以下错误而崩溃:

com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type com.example.myapplication.Message

我尝试对数据库进行不同的引用,但它们都不起作用。我该如何解决?

android firebase kotlin firebase-realtime-database android-recyclerview
1个回答
0
投票

当您使用以下参考时:

myRef = FirebaseDatabase.getInstance().getReference("Message")

然后将其传递给

setQuery()
方法:

.setQuery(myRef, Message::class.java)

您的适配器期望在屏幕上渲染

Message
对象。然而,在
Message
节点下,没有这样的对象,只有字符串。如果您想将节点映射到
Message
类型的对象,那么您应该考虑使用如下所示的模式:

db
|
--- Message
     |
     --- $pushedId
     |     |
     |     --- message: "asd"
     |
     --- $pushedId
           |
           --- message: "asd13"

这意味着实际消息应该存在于推送的 ID 下。

© www.soinside.com 2019 - 2024. All rights reserved.