使用Room开发相册APP时无法创建ViewModel实例问题求助
问题根因
从崩溃日志的最终异常栈可以直接定位问题:MyImagesDatabase.getInstance() 方法返回了空对象,导致Repository中调用 database.myImagesDAO() 时触发空指针异常,连锁导致ViewModel实例创建失败。
解决方案
1. 修正MyImagesDatabase单例实现
你没有提供MyImagesDatabase类的代码,该类的单例初始化逻辑错误是触发本次崩溃的核心原因,正确的Room Database单例实现参考如下:
import android.content.Context; import androidx.room.Database; import androidx.room.Room; import androidx.room.RoomDatabase; @Database(entities = {MyImages.class}, version = 1, exportSchema = false) public abstract class MyImagesDatabase extends RoomDatabase { // 声明DAO抽象方法 public abstract MyImagesDAO myImagesDAO(); // volatile修饰保证多线程可见性 private static volatile MyImagesDatabase INSTANCE; public static MyImagesDatabase getInstance(Context context) { // 双重校验锁实现单例 if (INSTANCE == null) { synchronized (MyImagesDatabase.class) { if (INSTANCE == null) { INSTANCE = Room.databaseBuilder( context.getApplicationContext(), MyImagesDatabase.class, "photo_album_db" // 数据库文件名 ).build(); } } } return INSTANCE; } }
2. 可选优化点
- 你的ViewModel类名存在拼写错误:
MyImagesVIewModel建议修正为符合命名规范的MyImagesViewModel,避免后续出现拼写类问题。 - MainActivity中获取ViewModel的写法可以简化,不需要手动指定AndroidViewModelFactory,更简洁的写法如下:
myImagesVIewModel = new ViewModelProvider(this).get(MyImagesVIewModel.class);
内容的提问来源于stack exchange,提问作者Saif ur rehman
相关产品推荐
相关产品推荐

