スタートアップ時にいくつかのJSONファイルを解析し、データをデータベースに取り込む必要があります。アプリケーションの起動時に、ファイルが解析されている間にスプラッシュ画面が表示されます。RxJavaを使用してメインスレッドからJSONを解析する
メインスレッドからすべての解析を実行し、アニメーションをスムーズに進めることができます。
RxJavaのObservable.create()
メソッドを使用してObservableを作成することができました。現在のコードを以下に示します。
Observable.create(new Observable.OnSubscribe<Object>() {
@Override
public void call(Subscriber<? super Object> subscriber) {
parseBundles();
parsePhrases();
}
})
.subscribeOn(Schedulers.io())
.subscribe(new Subscriber<Object>() {
@Override
public void onCompleted() {
startActivity(new Intent(SplashActivity.this, HomeActivity.class),
ActivityOptionsCompat.makeCustomAnimation(SplashActivity.this,
android.R.anim.fade_in, android.R.anim.fade_out).toBundle());
}
@Override
public void onError(Throwable e) {
e.printStackTrace();
}
@Override
public void onNext(Object o) {
}
});
これが正常IOスレッドで実行parseBundles()
とparsePhrases()
方法になります。状況によっては、これらの2つの方法では、ローカル.json
ファイルをInputStream
でロードし、.json
をString
変数にスローすると、該当するJSONObjects
が取り出され、データがDBに保存されます。
ただし、onCompleted()
は呼び出されません。 parseBundles()
とparsePhrases()
の両方の方法は、Rxコードを使用しない単純な古い方法です。私が理解しているように、完成すると何かを適切に放出するように修正する必要があります。
このコードを説明どおりに動作させるにはどうすればよいですか?これは現在RxJava 1を使って書かれていますが、RxJava 2を使った回答も受け入れられることに注意してください。
ありがとう、私はそれがとてもシンプルなものであることを認識しませんでした。 'Observable.from()'、 'Observable.just()'、および他の同様のメソッドを使用して作成されたObservablesを作成および使用することは、かなり簡単です。しかし、私は同意します。カスタムメソッドをラップするときに、 'Observable.create()'が必要であり、直感的ではありません。 – Orbit
'Observable.fromCallable'または' Observable.from(Future >) ' –
' .fromCallable() 'が便利に見えるので、私はそれを調べます。また、RxJava 2の 'Observable.create()'を使ってこの機能をどのように実装するのか知っていますか? 'ObservableOnSubscribe