Я пытаюсь прочитать файл из файловой системы, обновить базу данных комнаты и обновить пользовательский интерфейс в конце. Это кажется особенно простой задачей, но я борюсь с правильным использованием Android и RxJava Schedulers.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_welcome);
this.loadingTextView = this.findViewById(R.id.tvLoading);
this.subscription = Observable.just(0)
.subscribeOn(Schedulers.io())
.flatMap(ignore -> engine.checkEngineRequirements())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(ignore-> Log.e("glog", "Received on thread " + Thread.currentThread().getName()),
throwable -> Log.e("glog", "[WelcomeActivity.onCreate()]:" + throwable.getMessage()),
() -> {
this.loadingTextView.setText("Loaded");
Log.d("glog", "[WelcomeActivity] Launching new activity");
Intent intent = new Intent(this, PlayGameActivity.class);
this.startActivity(intent);
}
);
}
В checkEngineRequirements я загружаю файлы из файла и заполняю базу данных комнаты:
private Observable<Long> checkEngineRequirements() {
return new OfflineDataLoad().load(this.context)
.observeOn(Schedulers.io())
.flatMap(data -> this.dataRepository.addData(data));
}
public Observable<String> load(Context context) {
return Observable.create(emitter -> {
try {
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(
context.getAssets().open(DB_FILE_NAME), "UTF-8"));
(...)
while (lineAvailabe) {
emitter.onNext(line)
}
emitter.onComplete();
}
catch (Exception e) {
emitter.onError(e);
}
});
}
Мой источник данных (хранилище) реализован следующим образом:
@Override
public Observable<Long> addData(Data newDataItem) {
return Observable.fromCallable(() -> this.dataDao.insertData(newDataItem));
}
Проблема в том, что событие onComplete никогда не вызывается. Есть идеи, что я делаю не так?