You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ObjectBox 3.1.2实体类实现Parcelable接口运行报错求助

ObjectBox 3.1.2 实体类实现Parcelable 解决ClassNotFound异常方案

问题根源

ObjectBox编译时会为实体类生成子类(如YourEntity_),若手动实现Parcelable时逻辑不当,或混淆、构建缓存导致生成类未正确加载,就会触发ClassNotFound异常。

具体解决方案

Kotlin 项目

  1. 引入Parcelize插件:在项目根目录build.gradle中添加:
    plugins {
        id 'org.jetbrains.kotlin.android' version '对应项目Kotlin版本'
        id 'kotlin-parcelize'
    }
    
  2. 实体类配置:同时添加@Entity和@Parcelize注解,无需手动编写Parcelable逻辑:
    @Entity
    @Parcelize
    data class User(
        @Id var id: Long = 0,
        var name: String? = null
    ) : Parcelable
    

Java 项目

  1. 手动实现Parcelable:确保实体类所有字段(包括@Id字段)正确写入/读取Parcel:
    @Entity
    public class User implements Parcelable {
        @Id
        private long id;
        private String name;
    
        // 构造方法、getter/setter
    
        // Parcelable 核心实现
        protected User(Parcel in) {
            id = in.readLong();
            name = in.readString();
        }
    
        public static final Creator<User> CREATOR = new Creator<User>() {
            @Override
            public User createFromParcel(Parcel in) {
                return new User(in);
            }
    
            @Override
            public User[] newArray(int size) {
                return new User[size];
            }
        };
    
        @Override
        public int describeContents() {
            return 0;
        }
    
        @Override
        public void writeToParcel(Parcel dest, int flags) {
            dest.writeLong(id);
            dest.writeString(name);
        }
    }
    
  2. 混淆规则配置:在proguard-rules.pro中添加规则,防止实体类和ObjectBox相关类被混淆:
    -keep class io.objectbox.** { *; }
    -keep class 你的实体类包名.** { *; }
    

通用修复步骤

  • 清理构建缓存:执行./gradlew clean build,或在Android Studio中点击Build -> Clean Project后选择Rebuild Project
  • 检查依赖完整性:确保app模块build.gradle中依赖正确:
    dependencies {
        implementation "io.objectbox:objectbox-android:3.1.2"
        // Kotlin用kapt,Java用annotationProcessor
        kapt "io.objectbox:objectbox-processor:3.1.2"
    }
    

验证

构建完成后,查看build/generated/source/kapt/debug(或annotationProcessor目录)下是否生成了实体类的子类,确认该子类正确继承了Parcelable接口,之后即可正常传递实体类对象。

内容的提问来源于stack exchange,提问作者dengjie zhang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 13:07:20