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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 14:06:03