Unable to save new data in firebase

独自空忆成欢 提交于 2020-01-04 07:26:44

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!