Saya sedang mengerjakan jaringan untuk aplikasi saya. Jadi saya memutuskan untuk mencoba Square's Retrofit . Saya melihat bahwa mereka mendukung sederhanaCallback
@GET("/user/{id}/photo")
void getUserPhoto(@Path("id") int id, Callback<Photo> cb);
dan RxJava Observable
@GET("/user/{id}/photo")
Observable<Photo> getUserPhoto(@Path("id") int id);
Keduanya terlihat sangat mirip pada pandangan pertama, tetapi ketika sampai pada implementasi itu menjadi menarik ...
Sementara dengan implementasi callback sederhana akan terlihat mirip dengan ini:
api.getUserPhoto(photoId, new Callback<Photo>() {
@Override
public void onSuccess() {
}
});
yang cukup sederhana dan mudah. Dan dengan Observable
itu cepat menjadi verbose dan cukup rumit.
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());
}
Dan bukan itu. Anda masih harus melakukan sesuatu seperti ini:
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?
}
});
Apakah saya melewatkan sesuatu di sini? Atau apakah ini kasus yang salah untuk digunakan Observable
? Kapan seseorang harus / Observable
lebih suka daripada Callback sederhana?
Memperbarui
Menggunakan retrofit jauh lebih sederhana daripada contoh di atas seperti yang ditunjukkan @Niels dalam jawabannya atau dalam contoh proyek Jake Wharton U2020 . Tetapi pada dasarnya pertanyaannya tetap sama - kapan satu harus menggunakan satu cara atau yang lain?