如何将传入消息保存到 firebase DB

How to save incoming messages to firebase DB

我试图将收到的消息发送到我的 android phone 以保存在 firebase 中。但它保存了最后收到的一个。似乎 firebase 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);


        }
    }

你的结构颠倒了。我想你想要:

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是你在数据库中存放新消息的位置,然后在它下面的属性中设置三个值。