首页 文章

在用户之间检索Firebase数据

提问于
浏览
0

我希望能够始终在用户之间检索消息,但是当我专门引用我在向后端添加新消息时创建的子节点时,我似乎只能这样做(子节点是“USER1PHONENUMBER:USER2PHONENUMBER” “并且两个用户都将数据写入同一子节点 . 这适用于当用户进入联系人列表并选择联系人时,因为我可以获得两个用户电话号码并知道要使用哪个子节点 . 我这样做了:

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) {

                }
            });
        }

事情是,我希望以某种方式接收消息,我的用户在子节点上收到一条新消息,这会留下他们的电话号码,然后我可以存储它并将其显示在列表视图中,并附上联系方式,这样我就可以创建一个消息 . 用户手机随时收到新消息的通知 . 任何想法如何实现这一点?我现在真的没有任何想法 .

我有以下Messages类结构:

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;
    }


}

这就是我将数据保存到firebase的方式以及它在firebase end上的样子(用户名=用户的phonenumber):

// Save message on backend
                if (senderNumber > receiverNumber) {
                    Firebase ref = new Firebase(Passwords.FB_LINK).child("Message").child(username + ":" + binderContact.getNumber()).child(currentTimeStamp);
                    Message msg = new Message(username, binderContact.getNumber(), message, hour + ":" + minute, currentTimeStamp, repeat, "M, D, W");
                    ref.setValue(msg);
                }
                else {
                    Firebase ref = new Firebase(Passwords.FB_LINK).child("Message").child(binderContact.getNumber() + ":" + username).child(currentTimeStamp);
                    Message msg = new Message(username, binderContact.getNumber(), message, hour + ":" + minute, currentTimeStamp, repeat, "M, D, W");
                    ref.setValue(msg);
                }

enter image description here

1 回答

  • 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'是否是该客户端,如果是,则在列表中显示它 .

    以上是概念性的,因为它不是最好的结构;你可以做这样的事情

    users:
      user_info
        name
        phone
        shoe_size
      messages
        message_0
          from: from_user_phone
          message: "Planet 9 is called.. Planet 9"
    

    然后每个用户可以观察他们自己的消息节点以获取传入消息

    工作结构有许多不同的方法,因此您需要探索适合您情况的方法 .

相关问题