无法将新数据保存在Firebase中 [英] Unable to save new data in firebase
本文介绍了无法将新数据保存在Firebase中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我试图在节点 Visitors
下的Firebase中保存新数据。
Visitor:{
$ userId:{
.write:auth!= null&& $ userId === auth.uid,
.read:auth.uid!= null
} $
$ p
在我的应用程序中, pre> FirebaseAuth mFirebaseAuth = FirebaseAuth.getInstance();
FirebaseUser mFirebaseUser = mFirebaseAuth.getCurrentUser();
FirebaseDatabase mDatabase = FirebaseDatabase.getInstance();
if(mFirebaseUser == null){
} else {
String mUserId = mFirebaseUser.getUid();
DatabaseReference vRef = mDatabase.getReference(MyFirebaseConstants.DATABASE_Visitor);
DatabaseReference newVisitorRef = vRef.child(mUserId).push();
字符串visitorKey = newVisitorRef.getKey();
访客访客=新访客()// POJO
//其他几位设定员
visitor.setId(visitorKey);
newVisitorRef.setValue(property);
我的访客pojo扩展了RealmObject并实现了Parcelable
但是得到以下错误:
java.lang.StackOverflowError
at java .lang.reflect.Method.invokeNative(Native方法)$ b $在java.lang.reflect.Method.invoke(Method.java:525)
在com.google.android.gms.internal.zzamy $ zza.zzci(未知来源)
在com.google.android.gms.internal.zzamy.zzca(未知来源)
在com.google.android.gms.internal.zz
/ /和更多像这样
我的访客pojo
public class Visitor extends RealmObject implements Parcelable {
@PrimaryKey
private long timeStamp;
私人字符串visitorId;
private String phoneNumber =;
private String profileUri =;
public Visitor(){
}
保护访客(包裹在){
timeStamp = in.readLong();
visitorId = in.readString();
phoneNumber = in.readString();
profileUri = in.readString();
}
public static final Creator< Visitor> CREATOR = new Creator< Visitor>(){
@Override
public Visitor createFromParcel(Parcel in){
return new Visitor(in);
$ b @Override
public Visitor [] newArray(int size){
return new Visitor [size];
}
};
@Override
public int describeContents(){
return 0;
$ b @Override
public void writeToParcel(Parcel dest,int flags){
dest.writeLong(timeStamp);
dest.writeString(visitorId);
dest.writeString(phoneNumber);
dest.writeString(profileUri);
}
public void setTimeStamp(long timeStamp){
this.timeStamp = timeStamp;
}
public long getTimeStamp(){
return this.timeStamp;
}
public void setVisitorId(String visitorId){
this.visitorId = visitorId;
}
public void setPhoneNumber(String phoneNumber){
this.phoneNumber = phoneNumber;
}
public Uri getProfileUri(){
return Uri.parse(profileUri);
public void setProfileUri(Uri profileUri){
this.profileUri = profileUri.toString();
$ b
解决方案
我知道问题在哪里pojo
public Uri getProfileUri(){
return Uri .parse(profileUri);
public void setProfileUri(Uri profileUri){
this.profileUri = profileUri.toString();
区域支持 Uri $ code> Uri
作为参数,但firebase数据库不是。
<所以在我的pojo,我改成了 public String getProfileUri(){
return profileUri;
}
public void setProfileUri(String profileUri){
this.profileUri = profileUri;
}
I am trying to save new data in firebase under a node Visitors
. i have already set some rules on that node.
"Visitor":{
"$userId":{
".write": "auth != null && $userId === auth.uid",
".read": " auth.uid != null"
}
},
In my app
FirebaseAuth mFirebaseAuth = FirebaseAuth.getInstance();
FirebaseUser mFirebaseUser = mFirebaseAuth.getCurrentUser();
FirebaseDatabase mDatabase = FirebaseDatabase.getInstance();
if(mFirebaseUser == null){
}else{
String mUserId = mFirebaseUser.getUid();
DatabaseReference vRef = mDatabase.getReference(MyFirebaseConstants.DATABASE_Visitor);
DatabaseReference newVisitorRef = vRef.child(mUserId).push();
String visitorKey = newVisitorRef.getKey();
Visitor visitor = new Visitor()//POJO
// other few setters
visitor.setId(visitorKey);
newVisitorRef.setValue(property);
my visitor pojo extends RealmObject and implements Parcelable
But am getting the following error
java.lang.StackOverflowError
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.google.android.gms.internal.zzamy$zza.zzci(Unknown Source)
at com.google.android.gms.internal.zzamy.zzca(Unknown Source)
at com.google.android.gms.internal.zz
//and many more like this
My visitor pojo
public class Visitor extends RealmObject implements Parcelable{
@PrimaryKey
private long timeStamp;
private String visitorId;
private String phoneNumber="";
private String profileUri="";
public Visitor(){
}
protected Visitor(Parcel in) {
timeStamp = in.readLong();
visitorId = in.readString();
phoneNumber = in.readString();
profileUri = in.readString();
}
public static final Creator<Visitor> CREATOR = new Creator<Visitor>() {
@Override
public Visitor createFromParcel(Parcel in) {
return new Visitor(in);
}
@Override
public Visitor[] newArray(int size) {
return new Visitor[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeLong(timeStamp);
dest.writeString(visitorId);
dest.writeString(phoneNumber);
dest.writeString(profileUri);
}
public void setTimeStamp(long timeStamp){
this.timeStamp = timeStamp;
}
public long getTimeStamp(){
return this.timeStamp;
}
public void setVisitorId(String visitorId){
this.visitorId = visitorId;
}
public void setPhoneNumber(String phoneNumber){
this.phoneNumber = phoneNumber;
}
public Uri getProfileUri() {
return Uri.parse(profileUri);
}
public void setProfileUri(Uri profileUri) {
this.profileUri = profileUri.toString();
}
}
解决方案 I got to know where the problem is in my pojo
public Uri getProfileUri() {
return Uri.parse(profileUri);
}
public void setProfileUri(Uri profileUri) {
this.profileUri = profileUri.toString();
}
Realm is supporting getters of type Uri
and setters with type Uri
as parameter but firebase database does not.
so in my pojo, i changed to
public String getProfileUri() {
return profileUri;
}
public void setProfileUri(String profileUri) {
this.profileUri = profileUri;
}
这篇关于无法将新数据保存在Firebase中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文