我希望能够始终在用户之间检索消息,但是当我专门引用我在向后端添加新消息时创建的子节点时,我似乎只能这样做(子节点是“ + USER1PHONENUMBER:+ USER2PHONENUMBER“并且两个用户都将数据写入同一子节点。这适用于当用户进入联系人列表并选择联系人时,因为我可以获得两个用户电话号码并知道要使用哪个子节点。我这样做了:
mkdir /mnt/server
sshfs user@server:dir /mnt/server
cd /mnt/server
事情是,我希望以某种方式接收消息,我的用户在子节点上收到新消息,这会留下他们的电话号码,然后我可以存储它并在列表视图中显示联系人详细信息,所以我可以在用户手机上随时收到新消息时创建通知。任何想法如何实现这一点?我现在真的没有任何想法。
我有以下Messages类结构:
if (senderNumber > receiverNumber) {
Firebase ref = new Firebase(Passwords.FB_LINK).child("Message").child(username + ":" + binderContact.getNumber());
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot msg : dataSnapshot.getChildren()) {
Message message = msg.getValue(Message.class);
Log.d("TAG", "Message Received: " + message.getText());
}
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
}
else {
Firebase ref = new Firebase(Passwords.FB_LINK).child("Message").child(binderContact.getNumber() + ":" + username);
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot msg : dataSnapshot.getChildren()) {
Message message = msg.getValue(Message.class);
Log.d("TAG", "Message Received: " + message.getText());
}
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
}
这是我将数据保存到firebase的方式以及它在firebase end上的样子(用户名=用户的phonenumber):
public class Message {
private String from;
private String to;
private String text;
private String time;
private String timeCreated;
private Boolean repeat;
private String weekdays;
public Message() {}
public Message(String from, String to, String text, String time, String timeCreated, Boolean repeat, String weekdays) {
this.from = from;
this.to = to;
this.text = text;
this.time = time;
this.timeCreated = timeCreated;
this.repeat = repeat;
this.weekdays = weekdays;
}
public String getFrom() {
return from;
}
public String getTo() {
return to;
}
public String getText() {
return text;
}
public String getTime() {
return time;
}
public String getTimeCreated() {
return timeCreated;
}
public Boolean getRepeat() {
return repeat;
}
public String getWeekdays() {
return weekdays;
}
}
答案 0 :(得分:2)
这可能是答案的极简化;
messages
message_id_0
from: from_user_phone
to: to_user_phone
message: "Rock on, Garth"
message_id_1
from: from_user_phone
to: to_user_phone
message: "Rock on, Wayne"
所有用户都会观察有关childAdded事件的消息节点。
添加新邮件时,会将其发送给所有客户。
客户端应用检查邮件以确定是否“to_user_phone”#39;是该客户端,如果是,请在列表中显示它。
以上是概念性的,因为它不是最好的结构;你可以做这样的事情
users:
user_info
name
phone
shoe_size
messages
message_0
from: from_user_phone
message: "Planet 9 is called.. Planet 9"
然后每个用户都可以观察他们自己的消息节点以获取传入消息。
工作结构有许多不同的方法,因此您需要探索适合您情况的方法。