2017-11-07 6 views
0

フィードアプリを実装しようとしています。私は最大3秒間(フィードネットワークコールが完了したかどうかにかかわらず)実行され、ユーザにフィードが見える私のホーム画面に移動するスプラッシュアクティビティの新しいフィードをネットワークで呼びたいと思っています。私はスプラッシュで行った電話の応答をホームアクティビティに戻したいと思います。 RxJavaでRetrofitを使用してネットワークコールを行っています。私はこれを試すために再生オペレータでConnectableObserverを使用しようとしましたが、動作していません。私はこの方法スプラッシュでデータを先取りする

MyClientNetworkUtil.initObservable()を呼び出すSplashActivity者のonCreateで

MyClientNetworkUtilクラスは私のHomeActivityののonCreate機能に続いて、コード

パブリッククラスMyClientNetworkUtil {

private static MyClient client = ServiceGenerator.generateService(MyClient.class); 

private static ConnectableObservable<List<DataModel>> x; 

public static void initObservable() { 
    Observable<List<DataModel>> o = client.dataForUser("user"); 
    x = o.subscribeOn(Schedulers.io()).publish(); 
    x.connect(); 
} 

public static ConnectableObservable<List<DataModel>> getObservable() { 
    return x.replay(1); 
} 

}

を以下している、私がやろうとしています:

ConnectableObservable<List<DataModel>> x = MyClientNetworkUtil.getObservable(); 
x.connect(); 
x.subscribe(response -> Log.d("Response", response.get(1).getName()), e -> Log.e("Response", e.toString())); 

ただし、上記のログステートメントは実行されません。 私はここで間違っていることを手伝ってもらえますか?

ありがとうございました。

+0

x.replay(1)は、X以外の別のConnentableObservableを取得することを意味します。 –

答えて

0

ConnectableObservableと間違えています。

connect方法は、その加入者に、その基礎となる観測 からアイテムを放出始める開始を指示します。

subscribeを最初に入力してから、connectにする必要があります。

このコードは動作します:

public static void main(String[] args) throws Exception { 
    initObservable(); 
    getObservable().forEach(System.out::println); 
    x.connect(); 
    Thread.sleep(1000); 
    } 

    private static ConnectableObservable<List<Integer>> x; 

    public static void initObservable() { 
    Observable<List<Integer>> o = Observable.range(1, 50).buffer(10); 
    x = o.subscribeOn(Schedulers.io()).publish(); 
    // x.connect(); 
    } 

    public static Observable<List<Integer>> getObservable() { 
    return x.replay(1).refCount(); 
    } 

しかし、我々はconnectより良い方法を持っています。 refCountまたはautoConnectを使用できます。

refCount

限り、このConnectableObservableに少なくとも1つのサブスクリプションがあるとして、このConnectableObservableに接続されたままObservableを返します。

autoConnect

は自動的にこの ConnectableObservable第1の加入者が加入に接続 Observableを返します。

+0

あなたはreplay(1)から再度パブリッシュする必要はありません。ただx = o.replay(1).whateverConnectionYouNeed()は問題ありません。 –

関連する問題