내 앱의 네트워킹을 위해 노력하고 있습니다. 그래서 Square 's Retrofit 을 사용해보기로 결정했습니다 . 나는 그들이 간단한 지원을 참조하십시오Callback
@GET("/user/{id}/photo")
void getUserPhoto(@Path("id") int id, Callback<Photo> cb);
그리고 RxJava Observable
@GET("/user/{id}/photo")
Observable<Photo> getUserPhoto(@Path("id") int id);
둘 다 언뜻 보면 비슷해 보이지만 구현이되면 흥미로워집니다.
간단한 콜백 구현은 다음과 유사합니다.
api.getUserPhoto(photoId, new Callback<Photo>() {
@Override
public void onSuccess() {
}
});
아주 간단하고 간단합니다. 그리고 Observable
그것은 빨리 장황하고 상당히 복잡해집니다.
public Observable<Photo> getUserPhoto(final int photoId) {
return Observable.create(new Observable.OnSubscribeFunc<Photo>() {
@Override
public Subscription onSubscribe(Observer<? super Photo> observer) {
try {
observer.onNext(api.getUserPhoto(photoId));
observer.onCompleted();
} catch (Exception e) {
observer.onError(e);
}
return Subscriptions.empty();
}
}).subscribeOn(Schedulers.threadPoolForIO());
}
그리고 그것은 아닙니다. 여전히 다음과 같은 작업을 수행해야합니다.
Observable.from(photoIdArray)
.mapMany(new Func1<String, Observable<Photo>>() {
@Override
public Observable<Photo> call(Integer s) {
return getUserPhoto(s);
}
})
.subscribeOn(Schedulers.threadPoolForIO())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<Photo>() {
@Override
public void call(Photo photo) {
//save photo?
}
});
여기에 뭔가 빠졌습니까? 아니면 Observable
s 를 사용하는 것이 잘못된 경우 입니까? Observable
간단한 콜백보다 언제 / 선호해야 합니까?
최신 정보
@Niels가 그의 대답이나 Jake Wharton의 예제 프로젝트 U2020 에서 보여 주듯이 개장을 사용하는 것은 위의 예보다 훨씬 간단 합니다. 그러나 본질적으로 문제는 동일하게 유지됩니다. 한 가지 방법을 사용해야합니까?