ObjectBox 3.1.2实体类实现Parcelable接口运行报错求助
ObjectBox 3.1.2 实体类实现Parcelable 解决ClassNotFound异常方案
问题根源
ObjectBox编译时会为实体类生成子类(如YourEntity_),若手动实现Parcelable时逻辑不当,或混淆、构建缓存导致生成类未正确加载,就会触发ClassNotFound异常。
具体解决方案
Kotlin 项目
- 引入Parcelize插件:在项目根目录
build.gradle中添加:plugins { id 'org.jetbrains.kotlin.android' version '对应项目Kotlin版本' id 'kotlin-parcelize' } - 实体类配置:同时添加
@Entity和@Parcelize注解,无需手动编写Parcelable逻辑:@Entity @Parcelize data class User( @Id var id: Long = 0, var name: String? = null ) : Parcelable
Java 项目
- 手动实现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); } } - 混淆规则配置:在
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
相关产品推荐
相关产品推荐

