Попытка установить прослушиватель для сообщений чата Firebase - PullRequest
0 голосов
/ 26 августа 2018

Я пытаюсь настроить прослушиватель для 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, и именно здесь он пытается получить доступ.Вот и этот код на всякий случай:

package 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()
}

Я подумал, что это будет довольно простой и простой задачей, но, оказывается, это непросто, как я думал.Что именно мне здесь не хватает, что мешает мне делать это правильно?

1 Ответ

0 голосов
/ 26 августа 2018

У меня было import android.os.Message, которое импортировало неправильный класс.Мне нужно было только import com.ntx_deisgns.cyberchatter.cyberchatter.Message, чтобы импортировать мой класс сообщений.Проблема решена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...