【发布时间】:2018-08-26 04:39:18
【问题描述】:
我正在尝试为 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> */
还有
Unresolved reference: timestamp
这是我的片段类中的代码:
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)
}
我创建了一个名为 Message.kt 的类,这就是它试图从中提取的地方。以下是该代码以防万一:
包 com.ntx_deisgns.cyberchatter.cyberchatter
class Message {
constructor() //empty for firebase
constructor(messageText: String){
text = messageText
}
var text: String? = null
var timestamp: Long = System.currentTimeMillis()
}
我认为这将是一项相当简单直接的任务,但结果并不像我想象的那样简单。究竟是什么让我无法正确执行此操作?
【问题讨论】:
-
您在类导入部分中引用了错误的消息类。 android.os.Message 而不是 com.ntx_deisgns.cyberchatter.cyberchatter.Message
-
我指的是
viewAdapter = MessageAdapter(data)的“数据”和message.timestamp的“时间戳” -
没错。请添加您在此类中使用的导入语句
标签: android firebase firebase-realtime-database kotlin