Firestore:在类上找不到要序列化的属性

Posted

技术标签:

【中文标题】Firestore:在类上找不到要序列化的属性【英文标题】:Firestore : No properties to serialize found on class 【发布时间】:2019-05-17 00:06:13 【问题描述】:

注意:

请不要将此问题标记为重复,因为我已经回答了类似的问题及其答案。

错误:

java.lang.RuntimeException:在类 com.appz.abhi.shudhbatter.b.c 上找不到要序列化的属性 在 com.google.firebase.firestore.g.l$a.(未知来源) 在 com.google.firebase.firestore.g.l.a(未知来源) 在 com.google.firebase.firestore.g.l.b(未知来源) 在 com.google.firebase.firestore.g.l.b(未知来源) 在 com.google.firebase.firestore.g.l.a(未知来源) 在 com.google.firebase.firestore.ah.b(未知来源) 在 com.google.firebase.firestore.b.a(未知来源) 在 com.appz.abhi.shudhbatter.view.onboarding.a.a.a.a(来源不明) 在 com.appz.abhi.shudhbatter.view.onboarding.a.a.a.lambda $56b6vrtW7GJri_HgEDiOk1aRbrY(未知 来源) 在 com.appz.abhi.shudhbatter.view.onboarding.a.a.-$$Lambda$a$56b6vrtW7GJri_HgEDiOk1aRbrY.onClick(lambda) 在 android.view.View.performClick(View.java:5647) 在 android.view.View$PerformClick.run(View.java:22465) 在 android.os.Handler.handleCallback(Handler.java:754) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:163) 在 android.app.ActivityThread.main(ActivityThread.java:6238) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)

类似问题:

    Firebase No properties to serialize found on class No properties to serialize found on class com.contentful.vault.Asset Firebase No properties to serialize found with object in release mode Firebase - No properties to serialize found on class

proguard-rules.pro:

-assumenosideeffects class android.util.Log 
    public static *** d(...);


# Add this global rule
-keepattributes Signature

-keep class android.support.v7.widget.RecyclerView  *; 

# Keep custom model classes
-keepclassmembers class com.mypackage.model.**  *; 
-keep class com.mypackage.model.**  *; 
-keep class com.mypackage.util.**  *; 

使用映射文件,我发现错误是由以下模型类引起的:

User.java:

package com.mypackage.model;

import java.io.Serializable;

public class User implements Serializable 

    //  Data
    private Long phone;
    private String uid, name, mail, apartmentName, doorNo;
    private UserType userType;

    public User() 
        userType = UserType.USER;
    

    public Long getPhone() 
        return phone;
    

    public void setPhone(Long phone) 
        this.phone = phone;
    

    public String getUid() 
        return uid;
    

    public void setUid(String uid) 
        this.uid = uid;
    

    public String getName() 
        return name;
    

    public void setName(String name) 
        this.name = name;
    

    public String getMail() 
        return mail;
    

    public void setMail(String mail) 
        this.mail = mail;
    

    public String getApartmentName() 
        return apartmentName;
    

    public void setApartmentName(String apartmentName) 
        this.apartmentName = apartmentName;
    

    public String getDoorNo() 
        return doorNo;
    

    public void setDoorNo(String doorNo) 
        this.doorNo = doorNo;
    

    public UserType getUserType() 
        return userType;
    

    public void setUserType(UserType userType) 
        this.userType = userType;
    

UserType.java:

package com.mypackage.model;

public enum UserType 
    USER, ADMIN, DELIVERY

【问题讨论】:

【参考方案1】:

执行以下操作后,上述错误得到解决:

    清理并重建项目。 删除所有 proguard 规则。 在每个模型类的开头添加@Keep

【讨论】:

以上是关于Firestore:在类上找不到要序列化的属性的主要内容,如果未能解决你的问题,请参考以下文章

使用 node.js 标准环境在 AppEngine 上找不到模块 @google-cloud/firestore

I/flutter (22027):MissingPluginException(在通道 plugins.flutter.io/cloud_firestore 上找不到方法 DocumentRefer

使用 SnakeYaml 解析时忽略来自 yaml 的字段(无法在类上找到属性)

在计算机“。”上找不到服务 ServiceName

lombok

Lombok-@Data