2016-02-13 6 views
0

Я хотел бы получать сообщения между пользователями в любое время, но я могу только это сделать, когда я конкретно ссылаюсь на дочерний узел, который я создаю при добавлении нового сообщения в бэкэнд (дочерний узел «+ USER1PHONENUMBER: + USER2PHONENUMBER», и оба пользователя будут записывать данные на один и тот же дочерний узел). Это нормально, когда пользователь переходит в список контактов и выбирает контакт, поскольку я могу затем получить оба телефонных номера пользователя и узнать, какой дочерний узел использовать. Я сделал это вот так:Получение данных Firebase между пользователями

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

       } 
      }); 
     } 

Дело в том, я хотел бы, чтобы каким-то образом получать сообщения в любое время мой пользователь получает новое сообщение на дочерний узел, который indludes их 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; 
    } 


} 

Это, как я сохранить данные firebase и то, что он выглядит на firebase конце (имя пользователя = 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

+0

Пожалуйста, разместите свою структуру данных как текст вместо рисунка. Текст делает это намного быстрее и проще, когда мы можем копировать и вставлять в наш ответ. – Jay

ответ

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" 

Все пользователи наблюдают за узлом сообщений для дочерних событий.

Когда новое сообщение будет добавлено, оно будет отправлено всем клиентам.

Клиентское приложение проверяет сообщение, чтобы определить, является ли «to_user_phone» этим клиентом, и если да, отобразите его в списке.

Вышеупомянутое более концептуально, поскольку это не лучшая структура; вы могли бы сделать что-то подобное

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

затем каждый пользователь мог наблюдать за своим собственным узлом сообщений для входящих сообщений.

Для рабочей структуры существует множество способов, поэтому вам нужно изучить, что работает для вашей ситуации.

Смежные вопросы