DatabaseException: No properties to serialize found on class

8 浏览
0 Comments

DatabaseException: No properties to serialize found on class

我遇到了错误com.google.firebase.database.DatabaseException: 在类com.example.journyabode.detailsofUser中找不到可序列化的属性。\n我尝试了更改proguard规则,但仍然无法解决。\n

public class User_Details extends AppCompatActivity {
    EditText F_name,L_Name,Mobile,address;
    Button update;
    private FirebaseAuth mAuth;
    private String user;
    private DatabaseReference myref;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate (savedInstanceState);
        setContentView (R.layout.activity_user_details);
        mAuth  =FirebaseAuth.getInstance ();
        user = mAuth.getCurrentUser ().getUid ();
        myref = FirebaseDatabase.getInstance ().getReference ("Users");
        if(mAuth.getCurrentUser ()== null){
            finish ();
            startActivity (new Intent (this,Login.class));
        }
        F_name = (EditText)findViewById (R.id.F_Name);
        L_Name = (EditText)findViewById (R.id.L_Name);
        Mobile = (EditText)findViewById (R.id.Phone);
        address = (EditText)findViewById (R.id.Address);
        update = (Button)findViewById (R.id.update);
        update.setOnClickListener (new View.OnClickListener () {
            @Override
            public void onClick(View view) {
                String First_Name = F_name.getText ().toString ().trim ();
                String Last_Name = L_Name.getText ().toString ().trim ();
                String phone = Mobile.getText ().toString ().trim ();
                String addres = address.getText ().toString ().trim ();
                if (TextUtils.isEmpty (First_Name)) {
                    Toast.makeText (User_Details.this, "请输入名字", Toast.LENGTH_SHORT).show ();
                    return;
                }
                if (TextUtils.isEmpty (Last_Name)) {
                    Toast.makeText (User_Details.this, "请输入姓氏", Toast.LENGTH_SHORT).show ();
                    return;
                }
                if (TextUtils.isEmpty (phone)) {
                    Toast.makeText (User_Details.this, "请输入电话号码", Toast.LENGTH_SHORT).show ();
                    return;
                }
                if (TextUtils.isEmpty (addres)) {
                    Toast.makeText (User_Details.this, "请输入地址", Toast.LENGTH_SHORT).show ();
                    return;
                }
                    detailsofUser userDetail = new detailsofUser (First_Name, Last_Name, phone, addres);
                    FirebaseUser user = mAuth.getCurrentUser ();
                    myref.child (user.getUid ()).setValue (userDetail);
                    Intent intent = new Intent (User_Details.this,Homepage.class);
                    startActivity (intent);
                    Toast.makeText (User_Details.this, "详细信息已保存", Toast.LENGTH_SHORT).show ();
                }
        });
    }
}

\nLogcat:\n

2019-02-23 00:32:45.205 27516-27516/? E/Zygote: isWhitelistProcess - 进程是白名单
2019-02-23 00:32:45.205 27516-27516/? E/libpersona: scanKnoxPersonas
2019-02-23 00:32:45.206 27516-27516/? E/libpersona: 无法打开文件 - /data/system/users/0/personalist.xml - 无此文件或目录
2019-02-23 00:32:53.426 27516-27516/com.example.journyabode E/AndroidRuntime: 致命异常:主要进程
    进程:com.example.journyabode,PID:27516
    com.google.firebase.database.DatabaseException: 在类com.example.journyabode.detailsofUser中找不到可序列化的属性
        at com.google.android.gms.internal.firebase_database.zzku.(Unknown Source:761)
        at com.google.android.gms.internal.firebase_database.zzkt.zza(Unknown Source:12)
        at com.google.android.gms.internal.firebase_database.zzkt.zzi(Unknown Source:249)
        at com.google.android.gms.internal.firebase_database.zzkt.zzh(Unknown Source:0)
        at com.google.firebase.database.DatabaseReference.zza(Unknown Source:10)
        at com.google.firebase.database.DatabaseReference.setValue(Unknown Source:7)
        at com.example.journyabode.User_Details$1.onClick(User_Details.java:81)
        at android.view.View.performClick(View.java:6993)
        at android.widget.TextView.performClick(TextView.java:12752)
        at android.view.View$PerformClick.run(View.java:26509)
        at android.os.Handler.handleCallback(Handler.java:790)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:7025)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:441)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408)

0
0 Comments

这个问题的出现的原因是在一个名为User_Details的类中,没有找到需要序列化的属性。解决方法是在该类中添加一个静态的final long类型的serialUID属性,并将其赋值为40L。同时,还需要注意该类必须实现Serializable接口,因为该类继承自AppCompatActivity类,而AppCompatActivity类实现了Serializable接口。

0
0 Comments

在使用Firebase时,我遇到了一个问题:DatabaseException: No properties to serialize found on class。通过阅读Stack Overflow上的一个帖子(链接:Firebase No properties to serialize found on class),我找到了问题的原因和解决方法。

原因是我没有将变量定义为public。这是我犯下的错误。在使用Firebase时,所有要序列化的属性都必须是public的。

解决方法是将所有要序列化的属性改为public。在我的代码中,我需要确保所有要存储到Firebase数据库中的属性都是public的。

下面是我根据Stack Overflow帖子中的解决方案修改后的代码示例:

public class MyClass {

public String name;

public int age;

public boolean isActive;

public MyClass() {

// Default constructor required for Firebase

}

public MyClass(String name, int age, boolean isActive) {

this.name = name;

this.age = age;

this.isActive = isActive;

}

}

通过将属性改为public,我成功解决了DatabaseException: No properties to serialize found on class的问题。现在,我能够正确地将对象存储到Firebase数据库中了。

0
0 Comments

问题出现的原因是,detailsOfUser类没有实现Serializable接口和空构造函数。当使用FirebaseDatabase时,用于表示存储数据的类必须是可序列化的,这样对象才能被转换成JSON字符串和反向转换。

要解决这个问题,需要在detailsOfUser类中实现Serializable接口并添加一个空构造函数。这样,该类的对象就可以被正确地序列化和反序列化。

此外,你还可以为变量提供公共的getter和setter方法。Firebase对这两种情况都适用。

0