如何将传入消息保存到 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
是你在数据库中存放新消息的位置,然后在它下面的属性中设置三个值。
我试图将收到的消息发送到我的 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
是你在数据库中存放新消息的位置,然后在它下面的属性中设置三个值。