Room不执行AddNewCallback

时间:2018-04-14 18:31:21

标签: java android rx-java2 dagger-2 android-room

我正在尝试使用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

这是我的活动模块:

@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();
    }

}

2 个答案:

答案 0 :(得分:0)

来自bin的代码在您订阅just对象之前不会被执行,因此请更改:

Single

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

答案 1 :(得分:0)

'   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我不在这里写这个.. :/