Pre*_*rem 6 android rx-java retrofit retrofit2
在使用之前rx.Observable,我使用了一个带有改进的自定义回调,所以我可以添加一些特定的逻辑来处理响应/错误,而不必在回调中为每个请求作为样板代码.
我强制用户通过将它放在方法签名中来使用自定义回调,如下所示:
@GET("/user_endpoint/")
void getUser(CustomCallback<User> callback);
@GET("/profile_endpoint/")
void getProfile(CustomCallback<Profile> callback);
Run Code Online (Sandbox Code Playgroud)
但是现在我回来了Observable:
@GET("/user_endpoint/")
Observable<User> getUser();
@GET("/profile_endpoint/")
Observable<Profile> getProfile();
Run Code Online (Sandbox Code Playgroud)
我无法找到一种方法来确保自定义回调始终代理错误/响应.
另外,使用retrofit2.0,如何强制用户对返回的Call对象使用自定义回调?
CustomCallback供参考:
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);
}
Run Code Online (Sandbox Code Playgroud)
Tas*_*kos -1
停止。你的想法是错误的。
相反,请考虑这一点:您有正常的 Retrofit 界面:
interface Foo {
@GET("/user_endpoint/")
Observable<User> getUser();
}
Run Code Online (Sandbox Code Playgroud)
然后你就有了装饰器类:
public class FooDecorator implements Foo {
private Foo delegate = ...; // inject or create the Retrofit instance.
@Override
public Observable<User> getUser() {
return delegate.getUser().doOnNext(...).doOnError(...);
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您在代码中的任何地方都只使用第二个类(最好让 DI 系统使用它),然后您就完成了。
如果您喜欢冒险,您甚至可以对其进行调整,RxJavaCallAdapterFactory以便它可以修改返回的可观察值,而无需自定义类。
| 归档时间: |
|
| 查看次数: |
372 次 |
| 最近记录: |