私はまだRxJavaを考え出していて、Retrofit 2でネットワーキングのものをやっています。これを試してみましたが、今のところコードは読みやすくなりましたが、私は傾けることができないような問題がある。アクティビティリストア後にRxJavaがイベントに再サブスクライブする
私はログインを実行しようとしています(APIトークンを返します)。このトークンを使用して、チェーンの出力がトークン+データになるように、同じチェーン内のすべての初期データを取得します。
apiClient
.login()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.flatMap(token -> getData(token))
.subscribe(new Subscrber<Bundle>() {...});
と私は私のAPIサービス呼び出してこれを行うにはこれは罰金見えたが、私はまた、チェーンを起動および停止時にプログレスバーを表示したかったです。そこで.doOnSubscribe()
と.doOnUnsubscribe()
を追加しました。しかし、オリエンテーションを変更した後で、プログレスバーを非表示にしようとしていたフラグメントが常にnullであることに気付きました。
RxLifecycle libを検索して見つけたので、助けてくれるようでした。今は.cache()
とイベントチェーンの登録を解除しています。しかし、その後同じイベントに再びonCreate()
で購読する方法はわかりません。私はかなり基本的なものを見逃していると思うし、これについての助けを感謝します。
私はあなたのロジックを分割し、 'MVP'パターンを実装することができます。その後、 'Presenter'クラス(理想的にはビューインスタンスごとにシングルトンでなければなりません)は、すべてのネットワーキングを処理し、スクリーンローテーション後にビューを再構築します。実際には、rxJava https://github.com/konmik/nucleusに基づく 'MVP'パターンを使用することができるきれいなライブラリがあります(これは本当に小さいです)。たとえあなたがそれを使いたくないとしても、それをどのように実装できるかを知ることができます – Than
hmm .. okだから、RxJavaのルートを下る前に、良いMVP実装を読み出す必要があると思います... –
'MVP'は、あなたのコードをもっときれいにすることができますし、この問題を解決しますが、それはあなたが探している解決策ではないかもしれません(アプリケーションアーキテクチャ全体をMVPに切り替えるのは簡単ではありません)。回答)。サードパーティ製のlibやいくつかの素敵なパターンを使って 'MVP'なしでやる方法があると確信していますが、クリーンな解決策はありませんでした。上記のコメントを「他の人がどのように類似の問題を処理しているか」と考えてください。 – Than