【问题标题】:Recyclerview is not showing data from Firebase KotlinRecyclerview 未显示来自 Firebase Kotlin 的数据
【发布时间】:2018-08-30 11:27:55
【问题描述】:

正如标题所说,我从昨天开始使用 Kotlin。我想用来自 Firebase 的数据填充 RecyclerView

我尝试了一些方法,我构建了一个适配器并尝试填充 RecyclerView,我的数据将进入 Firebasebase 但未显示在 RecyclerView 中,并且我没有收到任何错误。

我找不到任何关于 Kotlin 语言问题的教程

这是我的适配器:

class QuestionAdapter(var items : ArrayList<Question>): RecyclerView.Adapter<QuestionAdapter.ViewHolder>() {

override fun getItemCount(): Int {
    return items.size
}

override fun onBindViewHolder(holder: ViewHolder?, position: Int) {
    var userDto = items[position]
    holder?.titleTextView?.text = userDto.titlu
    holder?.msgTextView?.text = userDto.uid
}

override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder {
    val itemView = LayoutInflater.from(parent?.context)
            .inflate(R.layout.conv_layout, parent, false)

    return ViewHolder(itemView)
}

class ViewHolder(row: View) : RecyclerView.ViewHolder(row) {
    var titleTextView: TextView? = null
    var msgTextView: TextView? = null

    init {
        this.titleTextView = row?.findViewById<TextView>(R.id.titleTextView)
        this.msgTextView = row?.findViewById<TextView>(R.id.msgTextView)
    }
}
}

这是我的 Activity 代码:

 private fun populalteQuestionsList() {
    val mChatDatabaseReference = FirebaseDatabase.getInstance().reference.child(Constants.USERS).child(mUserID).child(Constants.CHAT).child(Constants.QUESTION)
    val query = mChatDatabaseReference.orderByChild("time")
    query.addListenerForSingleValueEvent(object: ValueEventListener {
        override fun onDataChange(dataSnapshot: DataSnapshot?) {
            mRecyclerView.layoutManager = LinearLayoutManager(this@MainActivity)
            mRecyclerView.setHasFixedSize(true)
            val  questions = ArrayList<Question>()
            val adapter = QuestionAdapter(questions)
            mRecyclerView.adapter = adapter
        }
        override fun onCancelled(error: DatabaseError?) {
        }
    })
}

【问题讨论】:

    标签: android firebase firebase-realtime-database android-recyclerview kotlin


    【解决方案1】:

    Recyclerview 未显示来自 Firebase Kotlin 的数据

    因为您没有在 questions ArrayList&lt;Question&gt;()

    中添加任何数据

    签入您的代码

    试试这个

    override fun onDataChange(dataSnapshot: DataSnapshot?) {
                mRecyclerView.layoutManager = LinearLayoutManager(this@MainActivity)
                mRecyclerView.setHasFixedSize(true)
                val  questions = ArrayList<Question>()
                val adapter = QuestionAdapter(questions)
               // add data here inside your questions ArrayList<Question>()
                mRecyclerView.adapter = adapter
            }
    

    【讨论】:

      【解决方案2】:

      我希望在您的 adater 中定义 getItemCount() 方法,然后您可以更改以下代码...

      private fun populalteQuestionsList() {
          val mChatDatabaseReference = FirebaseDatabase.getInstance().reference.child(Constants.USERS).child(mUserID).child(Constants.CHAT).child(Constants.QUESTION)
          val query = mChatDatabaseReference.orderByChild("time")
          query.addListenerForSingleValueEvent(object: ValueEventListener {
              override fun onDataChange(dataSnapshot: DataSnapshot?) {
                  mRecyclerView.layoutManager = LinearLayoutManager(this@MainActivity)
                  mRecyclerView.setHasFixedSize(true)
                  val  questions = ArrayList<Question>()
                  val question = dataSnapshot.getValue(Question::class.java)
                  questions.add(question)
                  val adapter = QuestionAdapter(questions)
                  mRecyclerView.adapter = adapter
                  adapter.notifyDataSetChanged()        
              }
              override fun onCancelled(error: DatabaseError?) {
              }
          })
      }
      

      我希望适配器有以下方法...

      @Override
      public int getItemCount() {
          return items.size();
      }
      

      【讨论】:

      • 当您将 getItemCount() 方法复制到适配器时,它会自动转换为 kotlin。并检查您的 Firebase 数据库存储问题类数据并检查 onDataChange 方法是否提供数据。
      • 我知道,但这条线,我无法转换,它不工作 "questions.addAll(dataSnapshot.getValue(Question.class));"
      • 抱歉,您可以添加这一行 val question = dataSnapshot.getValue(Question::class.java) questions.add(question)
      • 抱歉打扰你了,val question = dataSnapshot.getValue(Question::class.java) 不是 val questions = ArrayList() ?
      • 我还是什么都不知道。介意我和你开始讨论聊天吗?
      猜你喜欢
      • 2019-05-24
      • 2020-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-01
      • 1970-01-01
      • 2021-01-13
      • 1970-01-01
      相关资源
      最近更新 更多