房间不执行 AddNewCallback

Room doesn't execute AddNewCallback

我正在尝试使用 Android 中的 RxJava2、Dagger2 和 Room 和 MVP 初始化数据,但是 Android 没有执行我的房间回调。

这是我创建数据库的方法,这是我在日志中看到的:

public synchronized static AppDatabase getInstance(Context context) {
    if (INSTANCE == null) {
        INSTANCE = buildDatabase(context);
   }
   return INSTANCE;
}

private static AppDatabase buildDatabase(Context context) {
    Log.i("jestem", "builddatabase");

    RoomDatabase.Callback callback = new Callback() {
        @Override
        public void onCreate(@NonNull SupportSQLiteDatabase db) {
            Log.i("jestem", "oncreatebuildda22tabase");
            super.onCreate(db);
          Single.just(getInstance(context).initData());
        }

        @Override
        public void onOpen(@NonNull SupportSQLiteDatabase db) {
            getInstance(context).onOpenDb();
            super.onOpen(db);
        }
    };

    return Room.databaseBuilder(context,
            AppDatabase.class,
            "pijatyka.db")
            .addCallback(callback)
            .build();}

public static void onOpenDb() {
    Log.i("jestem", "onopendb");
    hasFinishedCreating = true;

}

public boolean initData() {
    Log.i("Im here", "oncreatebuilddatabase");
    for (Cards card : DataGenerator.initCards()
            ) {
        myDAO().insertCard(card);
    }
    for (Awards award : DataGenerator.initAwards()
            ) {
        myDAO().insertAwards(award);
    }
    hasFinishedCreating = true;
    return true;
}

但是我在日志中没有看到任何这些,我不知道为什么......在函数 onCreateonOpen

这是我的 activity 模块:

@Module
public class StartModule {

    private final StartActivity activity;


    public StartModule(StartActivity activity) {
        this.activity = activity;
    }

    @Provides
    @StartScope
    public Activity activityProvides(){
        return  activity;
    }

    @Provides
    @StartScope
    public  StartView view(){
        return new StartView(activity);
    }

    @Provides
    @StartScope
    public StartPresenter presenter(StartView view, StartModel model){
        return new StartPresenter(view, model);
    }

    @Provides
    @StartScope
    public StartModel model(AppDatabase database){
        return new StartModel(activity, database);
    }
}

还有我的应用模块

@Module
public class MyAppModule {
    private final Context context;

    public MyAppModule(Application application){
        context = application.getApplicationContext();
    }


    @MyAppScope
    @ApplicationContext
    @Provides
    public Context context(){
        return context;
    }


    @MyAppScope
    @Provides
    public AppDatabase appDatabase(@ApplicationContext Context context){
         return AppDatabase.getInstance(context);
    }

    @Provides
    @MyAppScope
    public MyDAO providesMyDao(AppDatabase database){
        return database.myDAO();
    }

}

在您订阅 Single 对象之前,just 中的代码不会执行,因此请更改:

Single.just(getInstance(context).initData());

Single.just(getInstance(context).initData())
    .subscribeOn(Schedulers.io())   // init Data off main thread
    .subscribe();                   // pass some results handler, if you need

结果处理程序示例:

Single.just(getInstance(context).initData())
        .subscribeOn(Schedulers.io())
        .subscribe(result -> {
            if(result)
                System.out.println("Init successful");
            else
                System.out.println("Init unsuccessful");
        }, error -> {
            System.out.println("Error occurred: " + error);
        });
'   private Disposable isFinishedCreatingDataBase(){
      //  return model.hasFinishedCreating()
        return Single.just(appDatabase.hasFinishedCreating)
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.newThread())
                .delay(2, TimeUnit.SECONDS)
                .repeat()
                .subscribe(n -> {
                    if(n==true){
                        startNewActivity();
                    }
                    Log.i("show", String.valueOf(n));
                }); '

我订阅了他们,但在主持人中抱歉 :D 我不会在这里写这个.. :/