저는 RxJava를 매우 처음 사용하고 있으며 아직 데이터 흐름을 이해하려고 노력하고 있지만 이것이 토끼 구멍까지 멀리 떨어지기 전에 가능한지 알고 싶습니다.저지 RxJava 클라이언트 및 자원 끝점 컬렉션
목표 : API 리소스를 분리하고이를 허용은 몇 '알려진'API로 제공되는 HREF 링크를 기반으로 데이터를 가져 오기 위해 클라이언트 (웹/모바일)에 유연성을 제공뿐만 아니라, 배포하는 종점.
각 JSON에는 데이터의 전체 세부 정보를 검색 할 수있는 API 리소스에 대한 링크를 제공하는 'href'필드가있는 API에서 JSON 객체 컬렉션이 있습니다. 예를 들어
{
{
name: "assassins_creed",
href: "games/assassins_creedId123"
},
{
name: "bioshock",
href: "games/bioshockId456"
},
{
name: "clean_code",
href: "books/clean_codeId789"
},
{
name: "christmas",
href: "events/xmas001"
}
}
컬렉션을 검색 한 후, I 그러한 JSON 배열로 HREF 그 값을 이용하여 해당 리소스를 호출하고 컬렉션의 결과를 저장하려는.
String을 JSON 객체의 목록에서 다른 목록으로 매핑하면 Observable에 추가하여 각 리소스를 비동기 적으로 동일한 응답으로 검색 할 수 있습니다.
저는 Jersey example을 참조 용으로 사용하고 있으며 동적 href 링크를 사용하고 응답을 반환 할 수 없다고 우려하고 있습니다. 나는 각 hrefLinks 항목에 대한 Observable 인을 만들 수있는 for 루프에이를 넣어 주저했다
@Override
public List<JSONObject> getUsersDashboard(TokenModel token, String userId, @Suspended final AsyncResponse async) {
List<JSONObject> list = //Database request to get items for userId
List<String> hrefLinks = list.stream()
.map(e -> (String) e.get("href"))
.collect(Collectors.toList());
final Queue<String> errors = new ConcurrentLinkedQueue<>();
Observable.just(new JSONArray())
.zipWith(dashboard(token.getAccessToken(),"plhUrl", errors), (array, objects) -> {
array.add(objects);
return array;
})
.subscribe(response -> {
//errors?
async.resume(response);
}, async::resume);
}
private Observable<List<JSONObject>> dashboard(String access, String urlFragment, Queue<String> errors) {
Client client = ClientBuilder.newClient();
return RxObservable.from(client).target(urlFragment).request()
.header("Authorization", access)
.rx()
.get(new GenericType<List<JSONObject>>(){})
.onErrorReturn(throwable -> {
errors.offer(throwable.getMessage());
return Collections.emptyList();
});
}
:에
은 지금까지 나는 멈췄다.
여러 리소스의 응답을 클라이언트에 대한 단일 일관된 응답으로 가져 오려면 어떻게해야합니까?
getCollectionObjectObservable() :이 Retrofit 라이브러리의 메소드입니까? – fakataha
좀 더 많은 작업과 도움을받은 후, 나는 그것을 작동 시켰습니다. 고마워요! – fakataha