【发布时间】:2018-03-19 23:47:44
【问题描述】:
您好,我正在开发一个聊天应用程序,它具有 -:
- 当用户收到消息时从服务器中删除消息(Whatsapp Like)
(这就是我不使用 firebase 存在系统的原因)
我的 App 的 Fragments 和 Activity 结构是
在我的仪表板活动中,我正在收听来自服务器的数据,例如
mRootRef.child("Messeges").child(FirebaseAuth.getInstance()
.getCurrentUser().getPhoneNumber())
.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
//Send CallBack with Event bus in ConversationListFragmen
//Send CallBack to chattingActivity if User is chatting with someOne
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
当 ConversationListFragment 完成数据处理后,我将消息节点的值设置为“null”,因此消息从服务器中删除
- 现在问题出现在这里
当 Messege 的值设置为 null 时(服务器上的数据更改)
onDataChange
方法触发。这件事在messeges中造成重复
有人可以建议如何防止这个问题或者我应该如何构建我的服务器以便我可以解决这个问题
(如果您认为这是一个不好的问题,请评论“bad Question”而不是投反对票,我将删除此线程,因为我需要 80 多个声望才能进入 stackoverflow 上的 android 开发者聊天室)
和平
【问题讨论】:
-
也许您可以使用ChildEventListener 而不是ValueEventListener?使用子侦听器,您可以检查特定操作,例如更改或删除。
-
但是我的数据库引用指向“userPhone”,因此当我使用子事件监听器时,它的 OnChild 添加方法会在添加新发件人时触发,当我删除消息时,onChildChanged 方法不会触发 onChildRemoved 方法,请查看我的服务器结构
-
我应该将 onChildEventListerner 附加到所有朋友的节点吗?像发件人1,发件人2 ...等等?会是更好的方法吗?
-
你试过
if(!dataSnapshot.exists()) return; -
把它放在 onDataChange 的开头,这样你就只处理存在的数据,而不是当它被删除时处理
标签: android sqlite firebase firebase-realtime-database android-sqlite