2016-02-13 73 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; 
    } 


} 

這是我如何將數據保存到火力和它是什麼樣子的火力點結束(用戶名=用戶的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" 

所有用戶都觀察到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" 

然後每個用戶可以觀察他們自己的消息節點的傳入消息。

工作結構有很多不同的方式,所以你需要探索適合你的情況。