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
我已经开始使用 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