2016-10-29 42 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好的。很高興聽到 –