2017-05-27 10 views
0

ファイアベースに保存するために着信メッセージを自分のAndroid端末に送信しようとしました。最後に受信したものを保存します。ある種の上書きがfirebase dbに起こるようです。問題を理解するために私を助けてください。事前に感謝着信メッセージをファイアベースDBに保存するには

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

あなたは構造が反転しています。上記messageRef

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

は、新しいメッセージを格納するデータベース内の場所で、あなたはそれの下のプロパティに三つの値を設定します。私は、あなたがしたいと思います。

+0

ご返信いただきありがとうございますが、実際には役に立ちません。同じ問題が発生します。新しい受信メッセージは前のメッセージを上書きします。 –

関連する問題