问题
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();
}
}
回答1:
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;
}
来源:https://stackoverflow.com/questions/40317713/unable-to-save-new-data-in-firebase