ANDROID FirebaseDatabase:无法保存对象 [英] ANDROID FirebaseDatabase: Unable to save object
问题描述
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;
$ b $ p $这些是错误。
$ b
11-20 15:34:57.762 2752-2752 / shazdroid.com.surveyapp E / AndroidRuntime:
致命例外:main
过程:shazdroid.com.surveyapp,PID:2752
com.google.firebase.database.DatabaseException:发现冲突的
getters名称: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(Unknown Source)
at com.google.firebase.database.DatabaseReference.setValue(Unknown
Source)
at shazdroid.com.surveyapp.AddMember.savePerson(AddMember.java:207 )
at shazdroid.com.surveyapp.AddMember.access $ 000(AddMember.java:37)
at shazdroid.com.surveyapp.AddMember $ 6.onClick(AddMember.java:193)
at android .view.View.performClick(View.java:5610)
at android.view.View $ PerformClick.run(View.java:22260)
at android.os.Handler.handleCallback(Handler.java :751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
在android.app.ActivityThread.main(ActivityThread.java:6077)
在java.lang.reflect.Method.invoke(本地方法)
在
com.android.internal.os。 ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:865)
at 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>任务){
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.dismissW ithAnimation();
suc = new SweetAlertDialog(AddMember.this,SweetAlertDialog.ERROR_TYPE);
suc.setTitleText(Failed);
suc.setContentText(保存数据失败);
suc.setConfirmText(再试一次);
suc.setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener(){
@Override
public void onClick(SweetAlertDialog sweetAlertDialog){
savePerson();
}
});
suc.setCancelText(cancle);
suc.setCancelClickListener(new SweetAlertDialog.OnSweetClickListener(){
@Override $ b $ public void onClick(SweetAlertDialog sweetAlertDialog){
sweetAlertDialog.dismissWithAnimation();
}
})。show();
}
}
});
解决方案堆栈跟踪指的是 isChangingConfigurations
,它是 Activity
方法的名称。这可能表示您已经将类 Person
声明为活动的内部类。当Firebase序列化 Person
时,它也会尝试序列化封闭的Activity类并失败。
$ b 移动 Person
来打包级别或更改声明以使其成为静态内部类: public static class Person
。
I Couldn't add an object to firebase realtime database. I tried the following code. But when this code executes
db.child("Users").setValue(person);
my app crashes
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;
}
}
Here is the ERROR.
11-20 15:34:57.762 2752-2752/shazdroid.com.surveyapp E/AndroidRuntime:
FATAL EXCEPTION: main
Process: shazdroid.com.surveyapp, PID: 2752
com.google.firebase.database.DatabaseException: Found conflicting
getters for name: isChangingConfigurations
at com.google.android.gms.internal.zzamy$zza.(Unknown Source)
at com.google.android.gms.internal.zzamy.zzj(Unknown Source)
at com.google.android.gms.internal.zzamy.zzca(Unknown Source)
at com.google.android.gms.internal.zzamy.zzch(Unknown Source)
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.zzamy.zzbz(Unknown Source)
at com.google.firebase.database.DatabaseReference.zza(Unknown Source)
at com.google.firebase.database.DatabaseReference.setValue(Unknown
Source)
at shazdroid.com.surveyapp.AddMember.savePerson(AddMember.java:207)
at shazdroid.com.surveyapp.AddMember.access$000(AddMember.java:37)
at shazdroid.com.surveyapp.AddMember$6.onClick(AddMember.java:193)
at android.view.View.performClick(View.java:5610)
at android.view.View$PerformClick.run(View.java:22260)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
Here is how i'm saving the object.
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();
}
}
});
解决方案 The stack trace refers to isChangingConfigurations
, which is the name of a method of Activity
. This probably indicates that you have declared class Person
as an inner class of an activity. When Firebase serializes Person
it also tries to serialize the enclosing Activity class and fails.
Move the declaration of Person
to package level or change the declaration to make it a static inner class: public static class Person
.
这篇关于ANDROID FirebaseDatabase:无法保存对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!