2016-10-29 106 views
1

我试图在节点Visitors下的Firebase中保存新数据。我已经在该节点上设置了一些规则。无法在Firebase中保存新数据

"Visitor":{ 
    "$userId":{ 
    ".write": "auth != null && $userId === auth.uid", 
     ".read": " auth.uid != null" 
    } 
}, 

在我的应用程序

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

我的客人POJO扩展RealmObject并实现Parcelable

,但我收到以下错误

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 

我的客人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(); 
     } 

    } 
+0

显示乌尔POJO代码 – uguboz

+0

这个问题与答案在这里转贴:http://stackoverflow.com/q/40319118/4815718 –

+0

@qbix这是一个不同的情况。但我能弄清楚这个问题。检查我的回答 –

回答

4

我才知道问题出在哪里是我的POJO

public Uri getProfileUri() { 
    return Uri.parse(profileUri); 
    } 

    public void setProfileUri(Uri profileUri) { 
    this.profileUri = profileUri.toString(); 
    } 

境界是支持Uri类型的getter和setter与Uri类型作为参数,但火力数据库

所以在我的POJO,我改

public String getProfileUri() { 
    return profileUri; 
    } 
    public void setProfileUri(String profileUri) { 
    this.profileUri = profileUri; 
    } 
+0

你刚刚救了我的一天 –

+0

@AbdullahSaleem好的。很高兴听到 –