Retrofit 2.1 笔(详细)

2016-10-19  本文已影响0人  Demon鑫

Android 网路请求框架

一、RetrofitService 详细方法

1.retrofit注解
2.方法的编写

二、自定义请求返回基类

1.用途说明

可以统一返回参数(俗称:数据壳)。如:errorCode、message、data...
可根据自身要求进行调整。

2.代码
package com.demon.retrofit20.http;

/**
 * @author Demon
 * @version V1.0
 * @Description: 请求返回基类
 * @date 2016年10月18日16:17:35
 */
public class BaseCallBean<T> {

    public boolean success;
    public String code;
    public T data;

    public boolean isSuccess() {
        return success;
    }

    public void setSuccess(boolean success) {
        this.success = success;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }
}

三、自定义CallBack

1.用途说明

用作请求接收的统一处理。如:成功时执行的相应操作、失败时的统一处理、异常的统一处理...
可根据自身要求进行调整。

2.代码
package com.demon.retrofit20.http;

import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;

/**
 * @author Demon
 * @version V1.0
 * @Description: 自定义CallBack
 * @date 2016年10月18日16:19:25
 */
public abstract class CusCallback<T extends BaseCallBean> implements Callback<T> {

    @Override
    public void onResponse(Call<T> call, Response<T> response) {
        // 请求接收成功的统一处理...
        /*
        if (response.body().code.equals("0")) {
            onSuccess(response);
        } else {
            onFailure(response.body().code);
        }
        */
        onSuccess(response);
    }

    @Override
    public void onFailure(Call<T> call, Throwable t) {
        // 请求接收失败的统一处理...
        /*
        if (t instanceof SocketTimeoutException) {
            // 网络异常
            onNetError();
        } else if (t instanceof ConnectException) {
            // 网络异常
            onNetError();
        } else if (t instanceof RuntimeException) {
            // 系统异常
            onSysError();
        }
        */
        onFailure(t.getMessage());
    }

    /**
     * 请求成功
     * @param response  Response
     */
    public abstract void onSuccess(Response<T> response);

    /**
     * 请求失败
     * @param message   错误消息
     */
    public abstract void onFailure(String message);
}

四、出坑解决方案

1.乱码解决方式
String name =  URLEncoder.encode("111","UTF-8");

五、未探索内容

1.自定义Converter
2.缓存策略
3.与RxJava 结合

2016/10/19 1:04:11
代码地址

上一篇 下一篇

猜你喜欢

热点阅读