Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在用户之间检索Firebase数据_Android_Firebase_Firebase Realtime Database_Nosql - Fatal编程技术网

Android 在用户之间检索Firebase数据

Android 在用户之间检索Firebase数据,android,firebase,firebase-realtime-database,nosql,Android,Firebase,Firebase Realtime Database,Nosql,我希望能够在任何时候检索用户之间的消息,但是,我似乎只能在向后端添加新消息时专门引用我创建的子节点(子节点为“+USER1PHONENUMBER:+USER2PHONENUMBER”,两个用户都将数据写入同一子节点)时才能这样做。当用户进入联系人列表并选择联系人时,这很好,因为我可以获得两个用户电话号码并知道要使用哪个子节点。我在这里是这样做的: if (senderNumber > receiverNumber) { Firebase ref = new Fire

我希望能够在任何时候检索用户之间的消息,但是,我似乎只能在向后端添加新消息时专门引用我创建的子节点(子节点为“+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) {

                }
            });
        }
问题是,我想在我的用户在子节点上收到新消息时以某种方式接收消息,该子节点包含了他们的电话号码,因此我可以存储该消息并将其显示在带有联系人详细信息的列表视图中,也可以在用户收到新消息时在手机上创建通知。有没有办法做到这一点?我现在真的没有任何想法

我有以下消息类结构:

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端的外观(用户名=用户的电话号码):


这可能是答案的超级简化

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"
所有用户都会观察messages节点中添加的事件

添加新消息时,它将发送到所有客户端

客户端应用程序检查消息以确定“to_user_phone”是否为该客户端,如果是,则在列表中显示该客户端

以上内容更具概念性,因为它不是最佳结构;你可以这样做

users:
  user_info
    name
    phone
    shoe_size
  messages
    message_0
      from: from_user_phone
      message: "Planet 9 is called.. Planet 9"
然后,每个用户都可以观察自己的messages节点以获取传入消息


工作结构有很多不同的方法,所以你需要探索什么适合你的情况。

这可能是答案的超级简化

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"
所有用户都会观察messages节点中添加的事件

添加新消息时,它将发送到所有客户端

客户端应用程序检查消息以确定“to_user_phone”是否为该客户端,如果是,则在列表中显示该客户端

以上内容更具概念性,因为它不是最佳结构;你可以这样做

users:
  user_info
    name
    phone
    shoe_size
  messages
    message_0
      from: from_user_phone
      message: "Planet 9 is called.. Planet 9"
然后,每个用户都可以观察自己的messages节点以获取传入消息


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

请将您的数据结构作为文本而不是图片发布。当我们可以复制并粘贴到我们的答案中时,文本会使它变得更快、更容易。请将您的数据结构作为文本而不是图片发布。当我们可以复制并粘贴到答案中时,文本会使它变得更快、更容易。