我想在我的火力地堡群消息应用程序以实现一个“看”的功能。你可以请告知把最好的和最有效的方法(工作的代码可以理解的)?例如,应用程序将显示“ 由6所示的”或“ 由15所示在一组消息”。
这里是我的项目:https://github.com/firebase/friendlychat/tree/master/android
下面是在MainActivity:https://github.com/firebase/friendlychat/blob/master/android/app/src/main/java/com/google/firebase/codelab/friendlychat/MainActivity.java
要做到这一点,你需要添加另一个节点命名你的火力地堡的数据库seenBy
必须根据每一个嵌套messageId
的meassage
部分。你的数据库应该是这样的:
Firebase-root
|
---- messages
|
---- messageId1
|
---- meessage: "Hello!"
|
---- timestamp: 1498472455940
|
---- seenBy
|
---- userUid1: John
|
---- userUid2: Mary
|
---- userUid3: George
一个新的用户打开一个meesage每一次,只是添加uid
和name
上面相同。
为了实现Seen by 6
选择,它很容易。你只需要创建listener
和使用getChildrenCount()
方法如下:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference seenByRef = rootRef.child("messages").child(messageId).child("seenBy");
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
long seenBy = dataSnapshot.getChildrenCount();
Lod.d("TAG", "Seen by: " + seenBy);
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
seenByRef.addListenerForSingleValueEvent(eventListener);
要知道消息是否已经被打开过,就需要另一个字段添加到您需要添加一个用户部分boolean
使用的默认值false
。这个新的部分应该是这样的:
Firebase-root
|
---- users
|
---- userId1
|
---- meessages
|
---- messageId1: false
|
---- messageId2: false
|
---- messageId3: false
当用户打开该邮件,只需设置特定的消息从价值false
到true
,这意味着特定的消息已被打开。这是代码:
DatabaseReference openedRef = rootRef.child("users").child(userId).child("meessages").child("messageId1");
openedRef.setValue(true);
当你创建一个消息,使用push()
在这样的参考方法:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference messageRef = rootRef.child("meessages").push();
String messageKey = messageRef.getKey();
有了这个键,你可以在你使用它DatabaseReference
。以同样的方式,你可以使用的用户ID。
希望能帮助到你。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句