ANDROID FirebaseDatabase:无法保存对象

时间:2016-11-20 10:33:02

标签: java android firebase firebase-realtime-database

我无法将对象添加到firebase实时数据库。我尝试了以下代码。但是当这段代码执行时

db.child("Users").setValue(person); 

我的应用崩溃了

public class Person{
   String fname;
   String lname;
   Person()
   {}
   Person(String fname,String lname)
   {
       this.fname = fname;
       this.lname = lname;
   }

   public String getFname() {
       return fname;
   }

   public String getLname() {
       return lname;
   }
}

这是错误。

  

11-20 15:34:57.762 2752-2752 / shazdroid.com.surveyapp E / AndroidRuntime:   致命异议:主要                                                                          流程:shazdroid.com.surveyapp,PID:2752                                                                          com.google.firebase.database.DatabaseException:发现有冲突   getter for name:isChangingConfigurations                                                                              在com.google.android.gms.internal.zzamy $ zza。(未知来源)                                                                              在com.google.android.gms.internal.zzamy.zzj(未知来源)                                                                              在com.google.android.gms.internal.zzamy.zzca(未知来源)                                                                              在com.google.android.gms.internal.zzamy.zzch(未知来源)                                                                              在com.google.android.gms.internal.zzamy $ zza.zzci(未知来源)                                                                              在com.google.android.gms.internal.zzamy.zzca(未知来源)                                                                              在com.google.android.gms.internal.zzamy.zzbz(未知来源)                                                                              在com.google.firebase.database.DatabaseReference.zza(未知来源)                                                                              在com.google.firebase.database.DatabaseReference.setValue(未知   资源)                                                                              在shazdroid.com.surveyapp.AddMember.savePerson(AddMember.java:207)                                                                              在shazdroid.com.surveyapp.AddMember.access $ 000(AddMember.java:37)                                                                              在shazdroid.com.surveyapp.AddMember $ 6.onClick(AddMember.java:193)                                                                              在android.view.View.performClick(View.java:5610)                                                                              在android.view.View $ PerformClick.run(View.java:22260)                                                                              在android.os.Handler.handleCallback(Handler.java:751)                                                                              在android.os.Handler.dispatchMessage(Handler.java:95)                                                                              在android.os.Looper.loop(Looper.java:154)                                                                              在android.app.ActivityThread.main(ActivityThread.java:6077)                                                                              at java.lang.reflect.Method.invoke(Native Method)                                                                              在   com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:865)                                                                              在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)

以下是我如何保存对象。

    private void savePerson() {
    suc.show();
    Person person = new Person("shahbaz","ansari");
    db.child("User").setValue(person)
            .addOnCompleteListener(AddMember.this, new OnCompleteListener<Void>() {
        @Override
        public void onComplete(@NonNull Task<Void> task) {
            if(task.isSuccessful())
            {
                suc.dismissWithAnimation();
                suc = new SweetAlertDialog(AddMember.this,SweetAlertDialog.SUCCESS_TYPE);
                suc.setTitleText("Successful");
                suc.setContentText("Saving data successful");
                suc.setConfirmText("OK");
                suc.setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() {
                    @Override
                    public void onClick(SweetAlertDialog sweetAlertDialog) {
                        sweetAlertDialog.dismissWithAnimation();
                    }
                }).show();
            }else{
                suc.dismissWithAnimation();
                suc = new SweetAlertDialog(AddMember.this,SweetAlertDialog.ERROR_TYPE);
                suc.setTitleText("Failed");
                suc.setContentText("Failed to save data");
                suc.setConfirmText("Try Again");
                suc.setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() {
                    @Override
                    public void onClick(SweetAlertDialog sweetAlertDialog) {
                        savePerson();

                    }
                });
                suc.setCancelText("cancle");
                suc.setCancelClickListener(new SweetAlertDialog.OnSweetClickListener() {
                    @Override
                    public void onClick(SweetAlertDialog sweetAlertDialog) {
                        sweetAlertDialog.dismissWithAnimation();
                    }
                }).show();
            }
        }
    });

1 个答案:

答案 0 :(得分:25)

堆栈跟踪引用isChangingConfigurations,这是Activity方法的名称。这可能表示您已将类Person声明为活动的内部类。当Firebase序列化Person时,它还会尝试序列化封闭的Activity类并失败。

Person的声明移至包级别或更改声明以使其成为静态内部类:public static class Person