我正在尝试使用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;
}
但我在日志中没有看到任何此类内容,我不知道为什么......在函数onCreate
和onOpen
这是我的活动模块:
@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();
}
}
答案 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我不在这里写这个.. :/