Когда я пытаюсь получить доступ к объекту RoomDatabase внутри моего одноэлементного класса RepositoryProvider, я получаю исключение NullPointerException после закрытия моего приложения. Вы знаете, что является причиной этого странного поведения? База данных приложений инициализируется в SplashActivity. До сих пор я пытался заменить мой «синхронизированный синглтон» на «enum singleton», а также добавить префикс stati c к объекту базы данных, но ничего не получается.
public class RepositoryProvider {
private static RepositoryProvider INSTANCE;
private TrainingSummaryRepository trainingSummaryRepository;
private UserRepository userRepository;
private BluetoothDeviceRepository bluetoothDeviceRepository;
private TrainingActivityRepository trainingActivityRepository;
private AppDatabase appDatabase;
private ExternalStorageDatabase externalStorageDatabase;
private TrainingRepository trainingRepository;
private FriendRepository friendRepository;
public static RepositoryProvider getInstance() {
if (INSTANCE == null) {
synchronized (RepositoryProvider.class) {
if (INSTANCE == null) {
INSTANCE = new RepositoryProvider();
}
}
}
return INSTANCE;
}
public void initDatabase(Context context) {
appDatabase = Room.databaseBuilder(context.getApplicationContext(), AppDatabase.class, "nutpro-db")
.addMigrations(MIGRATION_1_2)
.build();
userRepository = new UserRepository(appDatabase);
}
public void initExternalStorageDatabase(Context context, String appFileSystemName) {
externalStorageDatabase = new ExternalStorageDatabase(context, appFileSystemName);
}
public TrainingRepository getTrainingRepository() {
if (trainingRepository == null) {
trainingRepository = new TrainingRepository();
}
return trainingRepository;
}
public FriendRepository getFriendRepository() {
if (friendRepository == null) {
friendRepository = new FriendRepository(appDatabase.friendDao(), getUserRepositoryInstance());
}
return friendRepository;
}
public ExternalStorageDatabase getExternalStorageDatabase() {
return externalStorageDatabase;
}
public TrainingSummaryRepository getTrainingSummaryRepositoryInstance() {
if (trainingSummaryRepository == null) {
trainingSummaryRepository = new TrainingSummaryRepository(appDatabase);
}
return trainingSummaryRepository;
}
public UserRepository getUserRepositoryInstance() {
return userRepository;
}
public BluetoothDeviceRepository getBluetoothDeviceRepositoryInstance() {
if (bluetoothDeviceRepository == null) {
bluetoothDeviceRepository = new BluetoothDeviceRepository(appDatabase);
}
return bluetoothDeviceRepository;
}
public TrainingActivityRepository getTrainingActivityRepository() {
if (trainingActivityRepository == null) {
trainingActivityRepository = new TrainingActivityRepository(appDatabase);
}
return trainingActivityRepository;
}
public void clear() {
if (appDatabase != null) {
appDatabase.clearAllTables();
}
}
}