提问者:小点点

我怎么能得到火力基地子键值,当我点击被推到火力基地的回收商视图项目


当使用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();
    }
});

共2个答案

匿名用户

    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中删除行