当我点击推送到 Firebase 的回收器视图项时,如何获取 Firebase 子键值



使用 datasnapshot 时,它会删除所有消息,但我只想删除选定的消息,因此当我单击作为消息的回收器视图项目时,请从回收器视图以及 Firebase 中删除该消息

view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
final DatabaseReference freezerItemsRef = rootRef.child("messages");
freezerItemsRef.child(freezerItemsRef.getKey()).removeValue();
}
});
final DatabaseReference deleteChatRef = FirebaseDatabase.getInstance().getReference(Common.CHATS);
deleteChatRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.getValue() != null) {
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
if (Objects.requireNonNull(snapshot.getRef().getKey()).equals(chatRef.get(position))) {
deleteChatRef.child(chatRef.get(position)).removeValue();
}
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});

将此查询写入回收器视图的 ClickListener 只需正确写入数据库聊天节点的路径,而不是 Common.Chat

要删除特定邮件,您需要知道该邮件的密钥。在 Firebase 实时数据库中,此类键通常以-L...开头。所以假设用户点击了带有键-Lasdasd19191的消息,你可以用以下方法删除消息:

freezerItemsRef.child("-Lasdasd19191").removeValue();

要知道用户点击的消息的键,您通常需要从用户点击的列表视图中的索引/位置(Android 使用的索引/位置(映射回数据库中的键(这是 Firebase 需要的(。请参阅我对此的较长解释:从回收商视图和火库中删除行

最新更新