【问题标题】:Firebase RecyclerView Adapter onBindViewHolderFirebase RecyclerView 适配器 onBindViewHolder
【发布时间】:2020-08-16 15:04:55
【问题描述】:

我正在尝试通过 FirebaseRecyclerAdapter 将数据从 Firebase 获取到我的 RecyclerView,但它总是将列表项设置为类的初始值

我正在使用数据绑定将类设置为变量 person。

适配器类:

class RecyclerAdapterAllUser(options: FirebaseRecyclerOptions<PersonalInfo>) :
        FirebaseRecyclerAdapter<PersonalInfo, RecyclerAdapterAllUser.Holder>(options) {
        private lateinit var binding: ListItemAllUserRecyclerBinding
    
        class Holder(val binding: ListItemAllUserRecyclerBinding) :
            RecyclerView.ViewHolder(binding.root)
    
        override fun onBindViewHolder(holder: Holder, position: Int, model: PersonalInfo) {
    
            binding.person = model
        }
    }

class PersonalInfo() {
    var name: String =""
    var nickName: String = ""
    private var age = 0

    constructor(name: String, nickName: String, age: Int) : this() {
        this.name = name
        this.age = age
        this.nickName = nickName
    }
}

活动

class AllUsers : AppCompatActivity() {
    private lateinit var binding: ActivityAllUsresBinding
    private lateinit var adapter: RecyclerAdapterAllUser
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = DataBindingUtil.setContentView(this, R.layout.activity_all_usres)
        binding.listItemAllUsersActivity.hasFixedSize()
        binding.listItemAllUsersActivity.layoutManager = LinearLayoutManager(this)
        val options = FirebaseRecyclerOptions.Builder<PersonalInfo>()
            .setQuery(
                FirebaseDatabase.getInstance().getReference("users"),
                PersonalInfo::class.java
            )
            .build()
        adapter = RecyclerAdapterAllUser(options)
        binding.listItemAllUsersActivity.adapter = adapter
    }

    override fun onStart() {
        super.onStart()
        adapter.startListening()
    }

    override fun onStop() {
        super.onStop()
        adapter.stopListening()
    }
}

firebase 数据库

chat-app-3ce78
users
    8tS5NqyvQUaLpo7oVbhCbhDnud82
        LogIn
        PersonalInfo
            age:18
            name: "mohamed"
            nickName: "komy"
    fTppKQYGMxbBPkMoM7A2aMwch332

【问题讨论】:

  • 有什么问题?
  • 我没有从 Firebase 获得日期,我总是得到 name ="",nickname="",age=0
  • 请将您的数据库结构添加为 JSON 文件或至少是屏幕截图。
  • 我无法上传照片我试图写入数据库,因为它在 firebase 中无论如何我从数据库中检索数据并将其传递给自定义 recyclerView 适配器并且工作正常,但 firebase recyclerView 没有t 返回任何数据
  • 我需要看到你真正的数据库,因为我认为FirebaseDatabase.getInstance().getReference("users") 是造成问题的原因。

标签: android firebase kotlin firebase-realtime-database


【解决方案1】:

您的代码中的问题在于您尝试使用以下参考:

FirebaseDatabase.getInstance().getReference("users")

在你的 RecyclerView 中显示 PersonalInfo 对象。请注意,这不可能因为在users 节点下,实际上没有这样的对象。 PersonalInfo 类型的对象存在于 PersonalInfo 节点下,因此存在这种行为。除此之外,您还缺少一个孩子,即8tS5NqyvQUaLpo7oVbhCbhDnud82,它是来自身份验证过程的用户的 UID。

要解决这个问题,您应该使用如下所示的查询:

val uid = FirebaseAuth.getInstance().currentUser!!.uid
val rootRef = FirebaseDatabase.getInstance().getReference()
val usersRef = rootRef.child("users")
val query = usersRef.orderByChild(uid + "/PersonalInfo/name")

这个query 对象应该被传递给setQuery() 方法以显示这些对象。

【讨论】:

    猜你喜欢
    • 2016-04-08
    • 2019-01-15
    • 1970-01-01
    • 1970-01-01
    • 2016-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多