retrofit2 return 每个 onNext 可观察到 1 个对象

retrofit2 return observable with 1 object for each onNext

我已经开始使用 retrofit2、rxjava 和 GSON,我想知道一些事情。目前我有这样的东西:

@GET("roster/byid/{userId}")
    Observable<List<Contact>> roster(@Path("userId") int userId);

如果一个联系人包含很多信息或者花名册中有很多联系人,则会占用大量内存。 是否有可能在 onNext 中逐一获取每个联系人的地方返回一个可观察的对象?这样我就可以处理它,将它保存到数据库中并继续处理下一个联系人?我知道 gson 支持流式传输,但我不知道如何将它与 retrofit2 结合使用。

您可以 flatMap 到另一个 Observable,然后使用 Observable.from(List)(请参阅 http://reactivex.io/documentation/operators/from.html)为列表中的每个值发出 onNext。这就是您要找的吗?

    final List<String> listString = new ArrayList<>();
    listString.add("AAAA");
    listString.add("BBBB");
    listString.add("CCCC");
    Observable.just(listString)
            .flatMap(new Func1<List<String>, Observable<String>>() {
                @Override
                public Observable<String> call(List<String> strings) {
                    Log.d("FLAT MAP", "call: " + strings);
                    return Observable.from(strings);
                }
            })
            .map(new Func1<String, String>() {
                @Override
                public String call(String s) {
                    Log.d("MAP", "call: " + s);
                    return s;
                }
            })
            .subscribe(new Action1<String>() {
                @Override
                public void call(String s) {
                    Log.d("SUBSCRIBER", "call: " + s);
                }
            });

日志输出

FLAT MAP: call: [AAAA, BBBB, CCCC]
MAP: call: AAAA
SUBSCRIBER: call: AAAA
MAP: call: BBBB
SUBSCRIBER: call: BBBB
MAP: call: CCCC
SUBSCRIBER: call: CCCC