Trước khi sử dụng rx.Observable
, tôi đã sử dụng gọi lại tùy chỉnh với trang bị thêm để tôi có thể thêm một số logic cụ thể để xử lý phản hồi/lỗi và không phải thực hiện điều đó bên trong gọi lại cho mọi yêu cầu dưới dạng mã bản mẫu.RxJava/Retrofit - Làm cách nào để buộc người dùng sử dụng một lớp con cụ thể của Người đăng ký?
Tôi buộc người dùng phải sử dụng gọi lại tùy chỉnh bằng cách đặt nó trong chữ ký phương pháp như thế này:
@GET("/user_endpoint/")
void getUser(CustomCallback<User> callback);
@GET("/profile_endpoint/")
void getProfile(CustomCallback<Profile> callback);
nhưng bây giờ mà tôi đang trả lại một Observable
:
@GET("/user_endpoint/")
Observable<User> getUser();
@GET("/profile_endpoint/")
Observable<Profile> getProfile();
tôi không thể tìm ra một cách để đảm bảo rằng một cuộc gọi lại tùy chỉnh luôn luôn proxy các lỗi/phản ứng.
Ngoài ra, với retrofit2.0, làm cách nào để buộc người dùng sử dụng gọi lại tùy chỉnh với đối tượng Call
trả về?
CustomCallback để tham khảo:
public abstract class CustomCallback<T> implements Callback<T> {
@Override public final void success(T t, Response response) {
// do some logic
onSuccess(t);
}
@Override public final void failure(RetrofitError error) {
// do something with the error here such as show a Toast
Toast.makeText(Application.getInstance(), error.getLocalizedMessage(), Toast.LENGTH_SHORT).show();
onFailure(error);
}
public abstract void onSuccess(T response);
public abstract void onFailure(Throwable error);
}
Các câu hỏi là tại sao bạn cần phải trả lại một quan sát được, khi bạn không thể sử dụng bất kỳ quan sát nào một cách lúng túng? Tại sao không làm cho CustomCallback mở rộng quan sát và sau đó trả lại này như là loại? Khi bạn nói rằng bạn muốn chắc chắn rằng nó ủy quyền phản hồi, bạn muốn proxy nó ở đâu, cho các nhà quan sát? –
loại trả về phải là một rx.Observable, không phải là một lớp con https://github.com/square/retrofit/blob/parent-1.4.0/retrofit/src/main/java/retrofit/RestAdapter.java#L244 – Prem