Я использую Кинжал и ObjectBox в Android MVVM Project
Я пытался предоставить синглтон BoxStore также Tables Rfid, Вес, Здоровье и мой AppDBH класс
Когда я добавляю AppDBH в AppModule и пытаюсь внедрить его, приложениеаварийно завершает работу.
Причина: io.objectbox.exception.DbException: еще один BoxStore все еще открыт для этого каталога: /data/data/com.sarveen.framework.forceplate/files/objectbox/objectbox.Подсказка: для большинства приложений рекомендуется хранить BoxStore в течение всего срока службы приложения. 3
Здесь AppModule Класс:
@Module
public class AppModule {
@Provides
@Singleton
AppDBH provideAppDBH(Box<Rfid> rfidBox, Box<Weight> weightBox, Box<Health> healthBox) {
return new AppDBH(rfidBox, weightBox, healthBox);
}
@Provides
@Singleton
Box<Rfid> provideBoxRfid(Context context) {
return provideBoxStore(context).boxFor(Rfid.class);
}
@Provides
@Singleton
Box<Health> provideBoxHealth(Context context) {
return provideBoxStore(context).boxFor(Health.class);
}
@Provides
@Singleton
Box<Weight> provideBoxWeight(Context context) {
return provideBoxStore(context).boxFor(Weight.class);
}
@Provides
@Singleton
BoxStore provideBoxStore(Context context) {
return MyObjectBox.builder()
.androidContext(context)
.build();
}
}
И вот AppDBH Класс:
@Singleton
public class AppDBH implements DBH{
public AppDBH(Box<Rfid> rfidBox, Box<Weight> weightBox, Box<Health> healthBox) {
this.rfidBox = rfidBox;
this.weightBox = weightBox;
this.healthBox = healthBox;
}
private final String TAG = "BOX_TAG";
private Box<Rfid> rfidBox;
private Box<Weight> weightBox;
private Box<Health> healthBox;
@Override
public List<Rfid> getAllRfids() {
return rfidBox.getAll();
}
@Override
public List<Weight> getAllWeights() {
return weightBox.getAll();
}
@Override
public List<Health> getAllHealths() {
return healthBox.getAll();
}
@Override
public long insertRfid(Rfid rfid) {
return rfidBox.put(rfid);
}
@Override
public long insertWeight(Weight weight) {
return weightBox.put(weight);
}
@Override
public long insertHealth(Health health) {
return healthBox.put(health);
}
}