房间不执行 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;
}
但是我在日志中没有看到任何这些,我不知道为什么......在函数 onCreate
和 onOpen
中
这是我的 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 我不会在这里写这个..
:/
我正在尝试使用 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
这是我的 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 我不会在这里写这个.. :/