gpt4 book ai didi

android - 改造和集中错误处理

转载 作者:IT老高 更新时间:2023-10-28 23:40:11 28 4
gpt4 key购买 nike

对服务器的每个请求都可能返回 error_code。我想在一个地方处理这些错误当我使用 AsyncTask 时,我有一个类似的 BaseAsyncTask

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);
}

但是,使用改造每个请求都有其错误处理回调:

                    git.getFeed(user,new Callback<gitmodel>() {
@Override
public void success(gitmodel gitmodel, Response response) {

}

@Override
public void failure(RetrofitError error) {

}
});
}
});

如何在一个地方处理所有错误?

最佳答案

如果你需要一些“逻辑”错误,那么你需要一些 Java 逻辑,因为它基本上不是改造功能:

  1. 创建一个实现 Retrofit 回调的 Your implementation Callback
  2. 创建一个定义方法“isError”的基础对象
  3. 修改 Retrofit RestAdapter 以获取您的回调而不是 Retrofit One

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);
}
}

MyObject.java(你从 Retrofit 获得的所有对象的基类)

public class MyObject {
public long id;
public boolean isError() {
return id == 1;
}
}

MyRealObject.java - 扩展基础对象的类

public class MyRealObject extends MyObject {
public long userId;
public String title;
public String body;
}

RetroInterface.java - 你应该熟悉的retrofit使用的接口(interface)

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...)

关于android - 改造和集中错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31642862/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com