2017-05-27 127 views
0

我試圖將傳入的消息發送到我的android手機以保存在firebase中。但它保存了最後收到的一個。似乎firebase db發生了某種覆蓋。你能幫我弄清楚這個問題嗎?在此先感謝如何將收到的消息保存到firebase數據庫

import android.content.BroadcastReceiver; 
    import android.content.Context; 
    import android.content.Intent; 

    import com.google.firebase.database.DatabaseReference; 
    import com.google.firebase.database.FirebaseDatabase; 

    /** 
    * Created by EngMohamed on 5/26/2017. 
    */ 

    public class SMSReciever extends BroadcastReceiver{ 

     private DatabaseReference mFirebaseDatabase; 
     private FirebaseDatabase mFirebaseInstance; 

     @Override 
     public void onReceive(Context context, Intent intent) { 

      //—get the SMS message passed in— 
      Bundle bundle = intent.getExtras(); 
      SmsMessage[] msgs = null; 
      String messages = ""; 
      if (bundle != null) 
      { 
    //—retrieve the SMS message received— 
       Object[] smsExtra = (Object[]) bundle.get("pdus"); 
       msgs = new SmsMessage[smsExtra.length]; 
       for (int i=0; i<msgs.length; i++) 
       { 
        SmsMessage sms = SmsMessage.createFromPdu((byte[])smsExtra[i]); 
    //take out content from sms 
        String body = sms.getMessageBody().toString(); 
        String address = sms.getOriginatingAddress(); 
        messages += "SMS from " + address + " :\n"; 
        messages += body + "\n"; 
       } 
       putSmsToFirebase(sms,context); 

      } 

     } 

     public void putSmsToFirebase(SmsMessage sms, Context context) 
     { 
      String messageDate = java.text.DateFormat.getDateTimeInstance().format(Calendar.getInstance().getTime()); 
      String messageBody = sms.getMessageBody().toString(); 
      String messageSender= sms.getOriginatingAddress().toString(); 

      mFirebaseInstance = FirebaseDatabase.getInstance(); 
      mFirebaseDatabase = mFirebaseInstance.getReference("messages"); 
      mFirebaseDatabase.child("messagesender").push().setValue(messageSender); 
      mFirebaseDatabase.child("messagebody").push().setValue(messageBody); 
      mFirebaseDatabase.child("messagedate").push().setValue(messageDate); 


     } 
    } 

回答

0

您有結構倒置。我想你想:

public void putSmsToFirebase(SmsMessage sms, Context context) 
{ 
    String messageDate = java.text.DateFormat.getDateTimeInstance().format(Calendar.getInstance().getTime()); 
    String messageBody = sms.getMessageBody().toString(); 
    String messageSender= sms.getOriginatingAddress().toString(); 

    mFirebaseInstance = FirebaseDatabase.getInstance(); 
    mFirebaseDatabase = mFirebaseInstance.getReference("messages"); 

    DatabaseReference messageRef = mFirebaseDatabase.push(); 
    messageRef.child("messagesender").setValue(messageSender); 
    messageRef.child("messagebody").setValue(messageBody); 
    messageRef.child("messagedate").setValue(messageDate); 
} 

在上面messageRef是您存儲新郵件數據庫的位置,然後你在其下屬性中設置三個值。

+0

非常感謝您的回覆,但實際上並沒有幫助。同樣的問題發生。新的傳入消息將覆蓋前一個消息。 –