提问人:Arnav Gupta 提问时间:11/9/2023 最后编辑:Arnav Gupta 更新时间:11/10/2023 访问量:57
不从 firebase 实时数据库中删除消息
Not deletion of messages from firebase realtime database
问:
在从 android studio 创建聊天应用程序时,Jawa 和 firebase 消息不会从 firebase 中删除。 当应用程序在android设备上运行并发出命令(从程序和firebase控制台)以从firebase Realtime Database删除消息时,一旦它们被删除,但同时,它们再次出现在firebase中。 当应用程序未在设备中运行时,它们将从控制台中删除(单击从 firebase 中删除节点)。
在 firebase 实时数据库规则中,我还向每个人授予了读写权限(即将读写设置为 true)
请帮我解决这个问题
我已经尝试了很多,使用不同的线程进行删除(使用删除以及设置值空命令进行删除)和更改 firebase 的规则,但是当应用程序在设备上运行时,我没有得到删除消息的结果。 请提供相同的解决方案。
public class Chat_detail_Activity extends AppCompatActivity implements Chat_message_recyclesAdapter.updateListIntefaceCallBack {
ActivityChatDetailBinding binding;
ArrayList<MessageModel> messagelist;
HashSet<String> deleteMessagelist;
Chat_message_recyclesAdapter chatMessageRecyclesAdapter;
String receiverName, receiverId, receiverPic;
String senderRoom, receiverRoom, senderId;
FirebaseDatabase database;
FirebaseStorage storage;
FirebaseAuth firebaseAuth;
Toolbar deleteToolbar, normalToolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ActivityChatDetailBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
deleteToolbar = binding.chatDetailToolbarChatDelete;
normalToolbar = binding.chatDetailToolbar;
deleteMessagelist = new HashSet<>();
messagelist = new ArrayList<>();
chatMessageRecyclesAdapter = new Chat_message_recyclesAdapter(this, messagelist);
chatMessageRecyclesAdapter.setInterface_DeleteList(this);
senderId = FirebaseAuth.getInstance().getUid();
database = FirebaseDatabase.getInstance();
storage = FirebaseStorage.getInstance();
firebaseAuth = FirebaseAuth.getInstance();
init();
//send message on click
binding.imageViewsendChatdetail.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Date date = new Date();
String messageTxt = binding.edtMsgChatdetail.getText().toString().trim();
if (messageTxt.trim().isEmpty()) {
} else {
MessageModel message = new MessageModel(senderId, messageTxt, date.getTime());
binding.edtMsgChatdetail.setText("");
database.getReference().child("Chats").child(senderRoom)
.child("Messages").push().addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
String messageKeyId=snapshot.getKey();
message.setMessageNodeId(messageKeyId);
database.getReference().child("Chats").child(senderRoom)
.child("Messages").child(messageKeyId).setValue(message).addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void unused) {
database.getReference().child("Chats").child(receiverRoom)
.child("Messages").child(messageKeyId).setValue(message);
}
});
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
}
});
binding.chatDetailRecycleView.setAdapter(chatMessageRecyclesAdapter);
senderRoom = senderId + receiverId;
receiverRoom = receiverId + senderId;
// Showing messages
database.getReference().child("Chats").child(senderRoom).child("Messages").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
messagelist.clear();
for (DataSnapshot dataSnapshot : snapshot.getChildren()) {
MessageModel messageModel = dataSnapshot.getValue(MessageModel.class);
messagelist.add(messageModel);
chatMessageRecyclesAdapter.notifyDataSetChanged();
}
binding.chatDetailRecycleView.scrollToPosition(messagelist.size() - 1);
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
Toast.makeText(Chat_detail_Activity.this, error.getMessage(), Toast.LENGTH_SHORT).show();
}
});
// Deleting message
binding.chatDetailToolbarChatDelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ExecutorService service = Executors.newSingleThreadExecutor();
service.execute(new Runnable() {
@Override
public void run() {
for (String deleteMessageNodeId : deleteMessagelist) {
database.getReference().child("Chats").child(senderRoom).child("Messages")
.child(deleteMessageNodeId).removeValue();
}
runOnUiThread(new Runnable() {
@Override
public void run() {
chatMessageRecyclesAdapter.reset();
}
});
}
});
}
});
}
private void init() {
receiverName = getIntent().getStringExtra("receiverName");
receiverId = getIntent().getStringExtra("receiverUID");
receiverPic = getIntent().getStringExtra("receiverPic");
binding.receiverNameChatDetailText.setText(receiverName);
Picasso.get().load(receiverPic).placeholder(R.drawable.blank_profile_pic).into(binding.receiverPicChatDetailImg);
}
@Override
public void updateList() {
// Updating List
deleteMessagelist = chatMessageRecyclesAdapter.getDeleteMessageList();
// Updating Toolbar
if (!deleteMessagelist.isEmpty()) {
normalToolbar.setVisibility(View.GONE);
deleteToolbar.setVisibility(View.VISIBLE);
setSupportActionBar(deleteToolbar);
binding.selectedMessagesChatDetailText.setText(String.valueOf(deleteMessagelist.size()));
binding.totalMessagesChatDetailText.setText(String.valueOf(messagelist.size()));
} else {
deleteToolbar.setVisibility(View.GONE);
normalToolbar.setVisibility(View.VISIBLE);
setSupportActionBar(normalToolbar);
}
}
}
答: 暂无答案
评论