okhttp-OkGo(okhttp-util升级版)网络请求框架(二)

本文介绍了OkGo网络请求框架的使用案例,包括Callback回调的详细顺序,如onBefore、onSuccess、onError等,并展示了不同CacheMode模式下的回调流程。此外,还提到了请求方法、图片请求、上传大文件JSON数据、网络缓存和HTTPS请求的支持。
摘要由CSDN通过智能技术生成

OkGo使用案例

一.基本功能

https://github.com/jeasonlzy/okhttp-OkGo/blob/master/README_JSONCALLBACK.md

//请求发挥的实体
public class ResultEntity<T> {
    private int resultCode;
    private String resultMSG;
    private T resultInfo;
}
//解析返回的response
public abstract class JsonCallback<T> extends AbsCallback<T> {
   
    @Override
    public void onBefore(BaseRequest request) {
        super.onBefore(request);
        // 主要用于在所有请求之前添加公共的请求头或请求参数
        // 例如登录授权的 token
        // 使用的设备信息
        // 可以随意添加,也可以什么都不传
        // 还可以在这里对所有的参数进行加密,均在这里实现
        request.headers("header1", "HeaderValue1")//
                .params("params1", "ParamsValue1")//
                .params("token", "3215sdf13ad1f65asd4f3ads1f");
    }

    @Override
    public T convertSuccess(Response response) throws Exception {
        // 得到类的泛型,包括了泛型参数
        Type genType = getClass().getGenericSuperclass();
        //从上述的类中取出真实的泛型参数,有些类可能有多个泛型,所以是数值
        Type[] params = ((ParameterizedType) genType).getActualTypeArguments();
        //我们的示例代码中,只有一个泛型,所以取出第一个,得到如下结果
        Type type = params[0];
        // 这里这么写的原因是,我们需要保证上面我解析到的type泛型,仍然还具有一层参数化的泛型,也就是两层泛型\
        if (!(type instanceof ParameterizedType)) throw new IllegalStateException("没有填写泛型参数");
        //此时,rawType的类型实际上是 class,但 Class 实现了 Type 接口,所以我们用 Type 接收没有问题
        Type rawType = ((ParameterizedType) type).getRawType();
        //这里我们既然都已经拿到了泛型的真实类型,即对应的 class ,那么当然可以开始解析数据了,我们采用 Gson 解析
        //以下代码是根据泛型解析数据,返回对象,返回的对象自动以参数的形式传递到 onSuccess 中,可以直接使用
        JsonReader jsonReader = new JsonReader(response.body().charStream());
        if (rawType == Void.class) {
            //无数据类型,表示没有data数据的情况(以  new DialogCallback<LzyResponse<Void>>(this)  以这种形式传递的泛型)
            SimpleResponse simpleResponse = Convert.fromJson(jsonReader, SimpleResponse.class);
            response.close();
            //noinspection unchecked
            return (T) simpleResponse.toLzyResponse();
        } else if (rawType == LzyResponse.class) {
            //有数据类型,表示有data
            LzyResponse lzyResponse = Convert.fromJson(jsonReader, type);
            response.close();
            int code = lzyResponse.code;
            //0 代表返回成功
            if (code == 0) {
                //noinspection unchecked
                return (T) lzyResponse;
            } else if (code == 104) {
                //比如:用户授权信息无效,在此实现相应的逻辑,弹出对话或者跳转到其他页面等,该抛出错误,会在onError中回调。
                throw new IllegalStateException("用户授权信息无效");
            } else if (code == 105) {
                //比如:用户收取信息已过期,在此实现相应的逻辑,弹出对话或者跳转到其他页面等,该抛出错误,会在onError中回调。
                throw new IllegalStateException("用户收取信息已过期");
            } else if (code == 106) {
                //比如:用户账户被禁用,在此实现相应的逻辑,弹出对话或者跳转到其他页面等,该抛出错误,会在onError中回调。
                throw new IllegalStateException("用户账户被禁用");
            } else if (code == 300) {
                //比如:其他乱七八糟的等,在此实现相应的逻辑,弹出对话或者跳转到其他页面等,该抛出错误,会在onError中回调。
                throw new IllegalStateException("其他乱七八糟的等");
            } else {
                throw 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值