Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 正在尝试设置Firebase聊天消息的侦听器_Android_Firebase_Firebase Realtime Database_Kotlin - Fatal编程技术网

Android 正在尝试设置Firebase聊天消息的侦听器

Android 正在尝试设置Firebase聊天消息的侦听器,android,firebase,firebase-realtime-database,kotlin,Android,Firebase,Firebase Realtime Database,Kotlin,我正在尝试为Firebase设置一个侦听器,以获取新的聊天消息并将其发送到片段中的回收器视图,但我一直收到两个错误: 第一个错误出现在setupAdapter中的“数据”上,第二个错误出现在message.timestamp上 类型不匹配: Required: kotlin.collections.ArrayList<com.ntx_deisgns.cyberchatter.cyberchatter.Message> /* = java.util.ArrayList<com.n

我正在尝试为Firebase设置一个侦听器,以获取新的聊天消息并将其发送到片段中的回收器视图,但我一直收到两个错误:

第一个错误出现在setupAdapter中的“数据”上,第二个错误出现在message.timestamp上

类型不匹配:

Required:
kotlin.collections.ArrayList<com.ntx_deisgns.cyberchatter.cyberchatter.Message> /* = java.util.ArrayList<com.ntx_deisgns.cyberchatter.cyberchatter.Message> */
Found:
kotlin.collections.ArrayList<android.os.Message> /* = java.util.ArrayList<android.os.Message> */
下面是我的片段类中的代码:

private fun createFirebaseListener(){
        val postListener = object : ValueEventListener {
            override fun onDataChange(dataSnapshot: DataSnapshot) {

                val toReturn: ArrayList<Message> = ArrayList();

                for(data in dataSnapshot.children){
                    val messageData = data.getValue<Message>(Message::class.java)

                    //unwrap
                    val message = messageData?.let { it } ?: continue

                    toReturn.add(message)
                }

                //sort so newest at bottom
                toReturn.sortBy { message ->
                    message.timestamp
                }

                setupAdapter(toReturn)
            }

            override fun onCancelled(databaseError: DatabaseError) {
                //log error
            }
        }
        val database = FirebaseDatabase.getInstance()
        val myRef = database.getReference("message")
        val mDatabase: DatabaseReference? = myRef

        mDatabase?.child("Group Chat")?.addValueEventListener(postListener)
    }

    /**
     * Once data is here - display it
     */
    private fun setupAdapter(data: ArrayList<Message>){
        val linearLayoutManager = LinearLayoutManager(context)
        viewManager = LinearLayoutManager(context)
        viewAdapter = MessageAdapter(data) {
//            Toast.makeText(this, "${it.text} clicked", Toast.LENGTH_SHORT).show()
        }

        //scroll to bottom
        mainActivityRecyclerView.scrollToPosition(data.size - 1)
    }

我原以为这将是一项相当简单和直接的任务,但结果并不像我想象的那么简单。我在这里到底遗漏了什么,使我无法正确执行此操作?

我导入了android.os.Message,它导入了错误的类。我只需要导入com.ntx_deisgns.cyberchatter.cyberchatter.Message就可以导入我的Message类。问题已解决。

您在“类导入”部分引用了错误的消息类。android.os.Message而不是com.ntx_deisgns.cyberchatter.cyberchatter.Message我指的是
viewAdapter=MessageAdapter(Data)
的“数据”和
消息的“时间戳”。请添加您在此类中使用的导入语句
private fun createFirebaseListener(){
        val postListener = object : ValueEventListener {
            override fun onDataChange(dataSnapshot: DataSnapshot) {

                val toReturn: ArrayList<Message> = ArrayList();

                for(data in dataSnapshot.children){
                    val messageData = data.getValue<Message>(Message::class.java)

                    //unwrap
                    val message = messageData?.let { it } ?: continue

                    toReturn.add(message)
                }

                //sort so newest at bottom
                toReturn.sortBy { message ->
                    message.timestamp
                }

                setupAdapter(toReturn)
            }

            override fun onCancelled(databaseError: DatabaseError) {
                //log error
            }
        }
        val database = FirebaseDatabase.getInstance()
        val myRef = database.getReference("message")
        val mDatabase: DatabaseReference? = myRef

        mDatabase?.child("Group Chat")?.addValueEventListener(postListener)
    }

    /**
     * Once data is here - display it
     */
    private fun setupAdapter(data: ArrayList<Message>){
        val linearLayoutManager = LinearLayoutManager(context)
        viewManager = LinearLayoutManager(context)
        viewAdapter = MessageAdapter(data) {
//            Toast.makeText(this, "${it.text} clicked", Toast.LENGTH_SHORT).show()
        }

        //scroll to bottom
        mainActivityRecyclerView.scrollToPosition(data.size - 1)
    }
class Message {

    constructor() //empty for firebase

    constructor(messageText: String){
        text = messageText
    }
    var text: String? = null
    var timestamp: Long = System.currentTimeMillis()
}