public abstract class BaseAsyncTask<Params, Progress, Result> extends AsyncTask<Params, Progress, Result> {
protected Context context;
private ProgressDialog progressDialog;
private Result result;
protected BaseAsyncTask(Context context, ProgressDialog progressDialog) {
this.context = context;
this.progressDialog = progressDialog;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected void onPostExecute(Result result) {
super.onPostExecute(result);
HttpResponse<ErrorResponse> response = (HttpResponse<ErrorResponse>) result;
if(response.getData().getErrorCode() != -1) {
handleErrors(response.getData());
}else
onResult(result);
}
private void handleErrors(ErrorResponse errorResponse) {
}
public abstract void onResult(Result result);
}
但是,使用retrofit每个请求都有其错误处理回调:
git.getFeed(user,new Callback<gitmodel>() {
@Override
public void success(gitmodel gitmodel, Response response) {
}
@Override
public void failure(RetrofitError error) {
}
});
}
});
我如何在一个地方处理所有错误?
如果您需要得到一些“逻辑”错误,那么您需要一些Java逻辑,因为它不是一个改型特性,所以基本上:
MyCallback.java
import android.util.Log;
import retrofit.Callback;
import retrofit.client.Response;
public abstract class MyCallback<T extends MyObject> implements Callback<T> {
@Override
public final void success(T o, Response response) {
if (o.isError()) {
// [..do something with error]
handleLogicError(o);
}
else {
handleSuccess(o, response);
}
}
abstract void handleSuccess(T o, Response response);
void handleLogicError(T o) {
Log.v("TAG", "Error because userId is " + o.id);
}
}
public class MyObject {
public long id;
public boolean isError() {
return id == 1;
}
}
public class MyRealObject extends MyObject {
public long userId;
public String title;
public String body;
}
java-retroInterface.java-您应该熟悉的retrofit使用的接口
import retrofit.http.GET;
import retrofit.http.Path;
public interface RetroInterface {
@GET("/posts/{id}")
void sendGet(@Path("id") int id, MyCallback<MyRealObject> callback);
}
最后是一段使用所有逻辑的代码
RestAdapter adapter = new RestAdapter.Builder()
.setEndpoint("http://jsonplaceholder.typicode.com")
.build();
RetroInterface itf = adapter.create(RetroInterface.class);
itf.sendGet(2, new MyCallback<MyRealObject>() {
@Override
void handleSuccess(MyRealObject o, Response response) {
Log.v("TAG", "success");
}
@Override
public void failure(RetrofitError error) {
Log.v("TAG", "failure");
}
});
如果复制并粘贴此代码,则在执行ITF.Sendget(1,new MyCallback..)
时将出现错误,执行ITF.Sendget(2,new MyCallback...)
时将获得成功
在改型2之前,有一种集中处理错误的方法- 但是现在在restfit 2中,RestAdapter已经重命名为,并且没有。是否有一种方法可以使用进行集中式错误处理?
我的服务器为所有请求返回一个基本的JSON结构,如下所示: 其中可以是true或false,数据可以返回许多内容,从到应用程序可能需要的数据。 需要更改/添加到我的改型API调用中的内容是什么?
我使用的是改型2.0.1。我想处理所有类型的网络错误和异常(如没有网络连接,超时错误,服务器找不到等)我已经找到这个链接。但是其中一些方法在V1.8.0中被否决了。在2.0.1中如何做到这一点?
我有三种不同的系统。我使用Spring integration来同步所有这些系统中的数据。 系统2将调用服务方法来持久化数据,如果请求有效,则返回响应,否则抛出异常 我需要发送服务方法响应到系统1和系统3,只有当操作成功。调用服务方法后,根据服务方法响应,使用Transformer生成对系统3的请求。在transformer之后,我将请求放入mq队列。 更新的JMS出站代码 如果服务类失败,我需要
像这样的东西 此外,在这种情况下,我应该停止重试,但如果是网络问题()则保持重试。
前面出现的例子确实很方便;都是 Result 和其他 Result 交互,还有 Option 和其他 Option 交互。 有时 Option 需要和 Result 进行交互,或是 Result<T, Error1> 需要和 Result<T, Error2 进行交互。在这类情况下,我们想要以一种方式来管理不同的错误类型,使得它们可组合且易于交互。 在下面代码中,unwrap 的两个实例生成了不同