当使用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需要的)。请参阅我在此处的详细解释:从回收器视图和Firebase中删除行