当前位置: 首页 > 知识库问答 >
问题:

改型和集中错误处理

边霄
2023-03-14
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) {

                    }
                });
            }
        });

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

共有1个答案

隆兴修
2023-03-14

如果您需要得到一些“逻辑”错误,那么您需要一些Java逻辑,因为它不是一个改型特性,所以基本上:

  1. 创建实现翻新回调的实现回调
  2. 创建定义方法“is error”的基对象
  3. 修改Restfit RestAdapter,以便获得您的回调而不是Restfit一个

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 的两个实例生成了不同