在 Firebase 中搜索特定节点

问题描述 投票:0回答:1

我在 firebase 中有名为对的路径,它存储这样的子节点。

pairs 在用户表和手镯表之间的关系数据库中具有类似于外键连接的子名形式,并存储为(braceletid-userid)

对{ 手镯ID-用户ID{ 手镯名称:名称值, 手镯id:手镯id值, 用户 ID:用户 ID 值 } .... }

我想检索具有特定用户 ID(例如 1234 值)的所有子项,并获取手镯 ID 和手镯名称值

我在 android 中有 recyclerview 列表,我想用具有特定用户 ID 的手镯名称填充它

我需要 Kotlin 中的这段代码

android firebase kotlin
1个回答
0
投票

想象你有这种数据模型

data class Bracelet(
val braceletname: String = "",
val braceletid: String = "",
val userid: String = ""
)

创建一个 RecyclerView 适配器,将手镯名称值绑定到您的 UI。

class BraceletAdapter(private val braceletList: List<String>) : RecyclerView.Adapter<BraceletAdapter.ViewHolder>() {

class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
    val braceletNameTextView: TextView = itemView.findViewById(R.id.braceletNameTextView)
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
    val view = LayoutInflater.from(parent.context).inflate(R.layout.item_bracelet, parent, false)
    return ViewHolder(view)
}

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
    holder.braceletNameTextView.text = braceletList[position]
}

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

在您的 Activity 或 Fragment 中,使用 Firebase 检索特定用户 ID 的数据:

val database = FirebaseDatabase.getInstance().getReference("pairs")
val query = database.orderByChild("userid").equalTo("1234") // Replace with the specific userid you're querying
val braceletList = mutableListOf<String>()

query.addListenerForSingleValueEvent(object : ValueEventListener {
    override fun onDataChange(snapshot: DataSnapshot) {
        braceletList.clear() // Clear the list to avoid duplicate data
        for (pairSnapshot in snapshot.children) {
            val bracelet = pairSnapshot.getValue(Bracelet::class.java)
            bracelet?.let {
                // Add braceletname to the list if it's not null
                braceletList.add(it.braceletname)
            }
        }
        // Notify RecyclerView adapter that data has changed
        adapter.notifyDataSetChanged()
    }

override fun onCancelled(error: DatabaseError) {
    // Handle possible errors.
    Log.e("FirebaseError", "Failed to retrieve data", error.toException())
}
})

现在,在您的 Activity 或 Fragment 中,初始化 RecyclerView 并设置适配器:

val recyclerView: RecyclerView = findViewById(R.id.recyclerView)
recyclerView.layoutManager = LinearLayoutManager(this)
val adapter = BraceletAdapter(braceletList)
recyclerView.adapter = adapter

为 RecyclerView 中的每个项目创建 XML 布局(例如 item_bracelet.xml):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="16dp">

    <TextView
        android:id="@+id/braceletNameTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Bracelet Name"
        android:textSize="18sp" />
</LinearLayout>
© www.soinside.com 2019 - 2024. All rights reserved.