ฉันกำลังทำงานกับเครือข่ายสำหรับแอปของฉัน ดังนั้นผมจึงตัดสินใจที่จะลองของจัตุรัสติดตั้งเพิ่ม ฉันเห็นว่าพวกเขาสนับสนุนเรียบง่ายCallback
@GET("/user/{id}/photo")
void getUserPhoto(@Path("id") int id, Callback<Photo> cb);
และ RxJava's Observable
@GET("/user/{id}/photo")
Observable<Photo> getUserPhoto(@Path("id") int id);
ทั้งคู่ดูคล้ายกันตั้งแต่แรกเห็น แต่เมื่อนำไปใช้งานมันน่าสนใจ ...
ในขณะที่การใช้งานการโทรกลับง่ายจะมีลักษณะคล้ายกับนี้
api.getUserPhoto(photoId, new Callback<Photo>() {
@Override
public void onSuccess() {
}
});
ซึ่งค่อนข้างง่ายและตรงไปตรงมา และด้วยObservable
อย่างรวดเร็วได้รับ verbose และค่อนข้างซับซ้อน
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
หรือเปล่า? เมื่อใดที่ / ควรจะชอบการObservable
โทรกลับอย่างง่าย?
ปรับปรุง
ใช้ retrofit ง่ายกว่าตัวอย่างข้างต้นเป็น @Niels แสดงให้เห็นในคำตอบของเขาหรือเจควอร์ตันเป็นตัวอย่างโครงการU2020 แต่โดยพื้นฐานแล้วคำถามยังคงเหมือนเดิม - เมื่อใดควรใช้วิธีหนึ่งหรืออีกวิธีหนึ่ง