首页 > 解决方案 > Android studio如何正确删除聊天中的消息

问题描述

我在删除聊天应用程序中的消息时遇到问题。我有两种类型的消息,图像和文本。我像这样删除它们:

DatabaseReference dbRef = FirebaseDatabase.getInstance().getReference("Chats");
        Query query = dbRef.orderByChild("time").equalTo(msgTimeStamp);
        query.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                for(DataSnapshot ds: snapshot.getChildren()) {

                    if (ds.child("sender").getValue().equals(myUID) && !ds.child("message").getValue().toString().equalsIgnoreCase("This message was deleted")) {
                        holder.messageLayout.setOnLongClickListener(new View.OnLongClickListener() {
                            @Override
                            public boolean onLongClick(View v) {
                                final AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
                                View view = LayoutInflater.from(mContext).inflate(R.layout.custon_view_for_dialog,  null);
                                builder.setView(view);
                                Button delete = view.findViewById(R.id.delete);
                                Button cancel = view.findViewById(R.id.cancel);
                                final AlertDialog dialog = builder.create();
                                dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

                                delete.setOnClickListener(new View.OnClickListener() {
                                    @Override
                                    public void onClick(View v) {
                                        deleteMessage(position);
                                        dialog.dismiss();
                                    }
                                });
                                cancel.setOnClickListener(new View.OnClickListener() {
                                    @Override
                                    public void onClick(View v) {
                                        dialog.dismiss();
                                    }
                                });

                                dialog.show();

                                return true;
                            }
                        });
                    }
                }
 
   @Override
        public void onCancelled(@NonNull DatabaseError error) {

        }

这是删除功能:

 private void deleteMessage(int position) {
 String msgTimeStamp = mChats.get(position).getTime();
    DatabaseReference dbRef = FirebaseDatabase.getInstance().getReference("Chats");
    Query query = dbRef.orderByChild("time").equalTo(msgTimeStamp);
    query.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {
            for (final DataSnapshot ds: snapshot.getChildren())
            {

                if(ds.child("type").getValue().equals("text"))
                {
                    HashMap<String, Object> hashMap = new HashMap<>();
                    hashMap.put("message", "This message was deleted");
                    ds.getRef().updateChildren(hashMap);
                }
                else
                {
                    FirebaseStorage firebaseStorage = FirebaseStorage.getInstance();
                    StorageReference storageReference = firebaseStorage.getReferenceFromUrl(ds.child("message").getValue().toString());
                    storageReference.delete().addOnSuccessListener(new OnSuccessListener<Void>() {
                        @Override
                        public void onSuccess(Void aVoid) {

                            HashMap<String, Object> hashMap = new HashMap<>();
                            hashMap.put("message", "This message was deleted");
                            hashMap.put("type","text");
                            ds.getRef().updateChildren(hashMap);
                        }
                    });
                }
            }

所以我的想法是如果消息是文本,那么我将文本设置为“此消息已删除”,如果消息是图像,我将其类型更改为文本并将其也设置为“此消息已删除”并删除来自 Firebase 存储的图像。删除对我有用,这是删除后的样子:

在此处输入图像描述

我面临的问题是,即使它已经被删除,我仍然可以删除该消息!AlertDialog当我单击已删除的消息时,我不希望出现删除 !!。

如您所见,我将此添加到我的条件中:

!ds.child("message").getValue().toString().equalsIgnoreCase("This message was deleted")

但问题依然存在,已删除的消息可以多次删除!我怎样才能防止这种情况发生?请帮忙

标签: android-studio

解决方案


推荐阅读