使用 android studio java Recycler 视图从 Firebase 实时数据库中删除一个节点
Posted
技术标签:
【中文标题】使用 android studio java Recycler 视图从 Firebase 实时数据库中删除一个节点【英文标题】:Delete a node from Firebase realtime database with android studio java Recycler view 【发布时间】:2021-11-23 19:53:33 【问题描述】:如何获取使用push().getKey()
插入的子ID,同时将数据插入数据库以应用节点的删除方法?我使用 recyclerView 将数据显示为卡片。
这是我的 Firebase 数据库:
Prescription
-MkWDI1v55zkQDdiGa8T
-MkXdxxXLoJgFJVQYDpo
-LP6RF0KD7Ve66snlayZjpSotQEJ2 //This is a unique ID that is provided by firebase authentication
-Ml-I9XVcNnOM8nc79sw //This is the Ordered Item 1
name: "Atarax"
qty: "30"
total: "300.00"
unitPrice: "10.00"
-Ml-M1pN4zsyyRf7pHeM //This is the Ordered Item 2
name: "Vitamin C"
qty: "10"
total: "500.00"
unitPrice: "50.00"
这是我的适配器类:
public class Cart_adapter extends RecyclerView.Adapter<Cart_adapter.MyViewHolder>
SpinKitView pbDelete;
Context context;
ArrayList<Orders> list;
DatabaseReference reference;
public Cart_adapter(Context context, ArrayList<Orders> list, SpinKitView pbDelete)
this.context = context;
this.list = list;
this.pbDelete = pbDelete;
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
View v = LayoutInflater.from(context).inflate(R.layout.order, parent, false);
return new MyViewHolder(v);
@Override
public void onBindViewHolder(@NonNull final MyViewHolder holder, int position)
Orders order = list.get(position);
holder.iname.setText(order.getName());
holder.qty.setText(order.getQty());
holder.unitPrice.setText(order.getUnitPrice());
holder.totPrice.setText(order.getTotal());
//Delete from Firebase Database
holder.btn_delete.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View view)
pbDelete.setVisibility(View.VISIBLE);
String key = FirebaseAuth.getInstance().getCurrentUser().getUid().toString();
reference = FirebaseDatabase.getInstance().getReference("Prescription").child(key);
FirebaseDatabase.getInstance().getReference("Prescription").child(key)
.child(reference.getKey().toString()).removeValue();
);
@Override
public int getItemCount()
return list.size();
public static class MyViewHolder extends RecyclerView.ViewHolder
TextView iname, qty, unitPrice, totPrice;
Button btn_delete;
LinearLayout orderCard;
public MyViewHolder(@NonNull View itemView)
super(itemView);
iname = itemView.findViewById(R.id.tv_itemName);
qty = itemView.findViewById(R.id.tv_qty);
unitPrice = itemView.findViewById(R.id.tv_unitPrice);
totPrice = itemView.findViewById(R.id.tv_totalPrice);
btn_delete = itemView.findViewById(R.id.btn_remove);
orderCard = itemView.findViewById(R.id.layout_order);
这是我的订单类:
package com.edu.wellwork;
public class Orders
public String name;
public String qty;
public String unitPrice;
public String total;
public Orders()
public Orders(String name, String qty, String unitPrice, String total)
this.name = name;
this.qty = qty;
this.unitPrice = unitPrice;
this.total = total;
public Orders(String itemName, String qty)
this.name = itemName;
this.qty = qty;
public String getName()
return name;
public String getQty()
return qty;
public String getUnitPrice()
return unitPrice;
public String getTotal()
return total;
如何获取唯一键(即每个订单的父节点)以从数据库中删除已订购的商品?
【问题讨论】:
您要删除哪个节点?这个-Ml-I9XVcNnOM8nc79sw
一个?
@AlexMamo 是的,这是我要删除的。我想知道删除类似节点的方法是什么。我无法导航到该节点。我可以使用这个导航到由firebase身份验证提供的节点(LP6RF0KD7Ve66snlayZjpSotQEJ2):DatabaseReference db =FirebaseDatabase.getInstance().getReference("Prescription").child(authCode); db.removeValue()
但这会删除整个用户的节点
【参考方案1】:
根据您的评论:
我可以使用以下命令导航到由 firebase 身份验证 (LP6RF0KD7Ve66snlayZjpSotQEJ2) 提供的节点:DatabaseReference db =FirebaseDatabase.getInstance().getReference("Prescription").child(authCode); db.removeValue() 但这会删除整个用户的节点
实际上,您正在删除整个节点,因为您的参考点正好指向该节点。为了能够删除 -Ml-I9XVcNnOM8nc79sw
节点,您应该创建一个完全指向该节点的引用:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference nodeToRemove = rootRef
.child("Prescription")
.child("-MkXdxxXLoJgFJVQYDpo")
.child("-LP6RF0KD7Ve66snlayZjpSotQEJ2")
.child("-Ml-I9XVcNnOM8nc79sw");
nodeToRemove.removeValue();
永远记住,要删除特定元素,您需要创建一个包含所有节点名称的引用,包括您要删除的节点。
如果您没有其中一个键,则应将值存储在变量中,如我在以下帖子中的回答中所述:
How to get specific pushedID in Firebase?【讨论】:
以上是关于使用 android studio java Recycler 视图从 Firebase 实时数据库中删除一个节点的主要内容,如果未能解决你的问题,请参考以下文章
Android studio导入项目时的问题(Re-download dependencies and sync project (requires network))