Room数据库@AutoMigration注解无法解析错误求助
Room数据库自动迁移报错:cannot resolve symbol @AutoMigration
问题详情
修改Room数据库Schema时,新增BLOB字段并将版本升级至2,在@Database注解中配置@AutoMigration(from = 1, to = 2)后,出现“cannot resolve symbol @automigration”错误。
完整Database类代码
@Database(entities = {Device.class, User.class, DeviceUserCrossRef.class}, autoMigrations = { @AutoMigration (from = 1, to =2) } ,exportSchema = true, version = 2) @TypeConverters({DateConverter.class, ImageConverter.class}) public abstract class DeviceDatabase extends RoomDatabase { private static DeviceDatabase INSTANCE; // DAO实例获取方法 public abstract DeviceDao deviceDao(); public abstract UserDao userDao(); public abstract UserWithDevicesDao userWithDevicesDao(); public abstract DeviceWithUsersDao deviceWithUsersDao(); // 单例模式:保证仅创建一个数据库实例 public static DeviceDatabase getInstance(Context context) { // 检查是否已存在实例 if (INSTANCE == null) { // 线程同步锁,避免多线程重复创建 synchronized (DeviceDatabase.class) { if (INSTANCE == null) { // 创建新的数据库实例 INSTANCE = Room.databaseBuilder( context.getApplicationContext(), DeviceDatabase.class, "database.sqlite" ).build(); } } } return INSTANCE; } }
解决步骤
- 确认Room版本兼容性:
@AutoMigration是Room 2.4.0及以上版本新增特性,需确保项目中所有Room依赖版本≥2.4.0。示例依赖配置(Module级build.gradle):
dependencies { def room_version = "2.5.0" implementation "androidx.room:room-runtime:$room_version" annotationProcessor "androidx.room:room-compiler:$room_version" // Kotlin项目替换为kapt "androidx.room:room-compiler:$room_version" implementation "androidx.room:room-ktx:$room_version" }
- 添加正确的类导入:检查代码顶部是否导入
androidx.room.AutoMigration,未导入则手动添加:
import androidx.room.AutoMigration;
- 同步项目并清理缓存:依次执行
File > Sync Project with Gradle Files、Build > Clean Project、Build > Rebuild Project,解决缓存导致的识别问题。 - 检查语法拼写:确保
@AutoMigration首字母大写,from和to参数格式正确,无多余空格或语法错误。
内容的提问来源于stack exchange,提问作者luckymanStefan
相关产品推荐
相关产品推荐

