2017-01-05 13 views
0

JSONを返すエンドポイントで、定義してインターフェイスしました。 RetrofitはこのJSONをMyObjectに変換します。それはリストや地図などでもありますが、今は関係ありません。onNext()を何度も呼び出すことができますか?

これは私が購読する方法です。

subscription = Retrofit.create(MyApi.class) 
      .doSomething() 
      .subscribeOn(Schedulers.newThread()) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .subscribe(new Subscriber<MyObject>() { 
       @Override 
       public void onCompleted() { 
       } 

       @Override 
       public void onError(Throwable e) { 

       } 

       @Override 
       public void onNext(MyObject myObject) { 

       } 
      }); 

私の質問は:

それはonNextが複数回呼び出されることは可能ですか? 「はい」の場合はどの場合ですか?

+0

MyApiインターフェイスで 'Observable'の代わりに' Single'を使用することができます。 'Single'では' onNext'が少なくとも1回呼び出されます(あるいはエラーです) – dwursteisen

答えて

1

doSomething()メソッドでさらにアイテムを発行しない場合、あなたのケースでは、不可能です。

しかし、Local firstアプローチを使用して、hot observableを購読すると、データベース内のデータが変更されるたびに新しいアイテムが発行されるなど、まれなケースがあります。

など。改造を使用して:

@Override 
public Observable<List<FollowMeUser>> getFollowMeUsers() { 
    return realm.where(FollowMeUser.class) 
      .findAll() 
      .asObservable() 
      .filter(RealmResults::isLoaded); 
} 

getFollowMeUsers() 
.subscribe(users -> {Timber.d("saved data has changed")}, Timber::e); 

あなたがFollowMeUserコレクションを削除/修正/挿入するたびに、getFollowMeUsersのすべての加入者に通知されます。

0

レトロフィットがデータの配列/リストを返す場合、onNextは複数回呼び出されます。 しかし、あなたのレトロフィットが単一のデータobjextを返す場合、onNextは一度だけ呼び出されます。 例:

//POJO 
class User { 
int userId; 
String UserName; 
} 

//POJO 
class UserData { 
List<User> users; 
} 

interface RetrofitGithub { 
@GET("...") 
Observable<List<User>> getUsers(); 

@GET("...") 
Observable<UserData> getUserData(); 

} 

あなたが呼び出されますonNext getUsers()を購読している場合、複数のN倍(N =リストのサイズ)あなたはgetUserData()を購読している場合onNextは一度だけ

と呼ばれます。 。

関連する問題