美文网首页
超简单方便的网络框架LightHttp

超简单方便的网络框架LightHttp

作者: 鹅鹅鹅曲项向天歌呀 | 来源:发表于2020-01-31 22:48 被阅读0次

    1.引用
    2.get 请求,post 请求
    3.参数的传递(form 和 json)
    4.设置全局配置
    5.设置 header(自定义的请求拦截处理器,超好用)
    6.还有下载功能...我没用到..所以没写,github 上面有使用详情
    7.github 地址:https://github.com/YuQianhao/LightHttp

    前言:
    ​ LightHttp提供了的Get,Post,Put,Delete四种不同方法的同步和异步请求,提供了一个文件下载服务以及一个请求拦截处理器。

    一、引用

    1、首先将jitpack仓库添加到项目的build.gradle中

    allprojects {
        repositories {
            maven { url 'https://www.jitpack.io' }
        }
    }
    

    2、在将仓库的项目依赖到你的项目Module的build.gradle中

    implementation 'com.github.YuQianhao:LightHttp:1.2.5'
    

    二、get 请求,post 请求

    用法一:

    get 请求: GetRequest.create()

    LightHttp.create(GetRequest.create("https://api.apiopen.top/getSingleJoke"))
                    .params(FormRequestParameter.create().add("sid","29002949"))
                    .callback(new ResponseCallback<JokeContent>() {
                        @Override
                        public void onSuccess(JokeContent responseData) {
                            Log.e("bbb","请求的状态码: "+getCode());
                            Log.e("bbb","请求的状态消息: "+getMessage());
                            Log.e("bbb", "字符串类型的返回数据: " + getResponseBufferString());
                        }
    
                        @Override
                        public void onFailure(int code, String message) {
                            super.onFailure(code, message);
                            Log.e("bbb", code +" "+ message);
                        }
    
                    })
                    .async();
    

    post 请求: GetRequest.create()

    LightHttp.create(PostRequest.create("https://api.apiopen.top/getWangYiNews"))
          .params(FormRequestParameter.create().add("page", "1")
                  .add("count", "10"))
          .callback(new ResponseCallback<NewsResponse>() {
              @Override
              public void onSuccess(NewsResponse responseData) {
                  Log.e("bbb", "请求的状态码: " + getCode());
                  Log.e("bbb", "请求的状态消息: " + getMessage());
                  Log.e("bbb", "字符串类型的返回数据: " + getResponseBufferString());
              }
    
              @Override
              public void onFailure(int code, String message) {
                  super.onFailure(code, message);
                  Log.e("bbb", code + " " + message);
              }
    
          })
          .async();
    

    get 和 post 的区别就是GetRequest.create()和PostRequest.create()的区别,其他的地方都一样

    用法二

    统一管理地址:

    public class RequestAddressManager {
    
        @GetRequest(url = "https://api.apiopen.top/getSingleJoke")
        public static class GetSingJoke{}
    
        @PostRequest(url="https://api.apiopen.top/getWangYiNews")
        public static class GetWangYiNews{}
    }
    

    使用:

    //get
    LightHttp.loadRequest(RequestAddressManager.GetSingJoke.class)
            .params(FormRequestParameter.create().add("sid", "29002949"))
            .callback(new ResponseCallback<JokeContent>() {
                @Override
                public void onSuccess(JokeContent responseData) {
                    Log.e("bbb", "请求的状态码: " + getCode());
                    Log.e("bbb", "请求的状态消息: " + getMessage());
                    Log.e("bbb", "字符串类型的返回数据: " + getResponseBufferString());
                }
    
                @Override
                public void onFailure(int code, String message) {
                    super.onFailure(code, message);
                    Log.e("bbb", code + " " + message);
                }
    
            })
            .async();
    
    
    //post
    LightHttp.loadRequest(RequestAddressManager.GetWangYiNews.class)
            .params(FormRequestParameter.create().add("page", "1")
                    .add("count", "10"))
            .callback(new ResponseCallback<NewsResponse>() {
                @Override
                public void onSuccess(NewsResponse responseData) {
                    Log.e("bbb", "请求的状态码: " + getCode());
                    Log.e("bbb", "请求的状态消息: " + getMessage());
                    Log.e("bbb", "字符串类型的返回数据: " + getResponseBufferString());
                }
    
                @Override
                public void onFailure(int code, String message) {
                    super.onFailure(code, message);
                    Log.e("bbb", code + " " + message);
                }
    
            })
            .async();
    

    🤩🤩🤩怎么可以这么简单使用,完全不用封装~拿过来就用,管!

    如何查看一下,请求的结果呢?

    方法一:在onSuccess方法中打印

      Log.e("bbb", "请求的状态码: " + getCode());
      Log.e("bbb", "请求的状态消息: " + getMessage());
      Log.e("bbb", "字符串类型的返回数据: " + getResponseBufferString());
    

    此外,还提供了以下方法供开发者使用哦~~~

    方法名称 说明
    Headers getHeaders() 获取Headers
    Long getContentLength() 获取返回的数据的长度
    byte[] getResponseBuffer() 获取返回的数据的原始类型
    String getResponseBufferString() 使用默认编码获取字符串类型的返回数据
    String getResponseBufferString(Charset charset) 使用指定编码获取字符串类型的返回数据
    String getMessage() 获取Http请求的状态消息
    int getCode() 获取Http请求的状态码
    MediaType getMediaType() 获取返回数据类型的MediaType
    _Tx to() 获取服务具体返回的数据,并给提供转换后的版本

    方法二:在MyApplication中设置一下setRequestFirstHandler,也就是作者自定义的请求拦截器,注意哦,只在这里设置一下就好啦。也只能在这里设置~~~

    public class MyApplication extends Application {
        @Override
        public void onCreate() {
            super.onCreate();
            LightHttp.setRequestFirstHandler(new IRequestFirstHandle() {
                @Override
                public String handlerUrl(String requestUrl) {
                    Log.e("aaa","requestUrl: "+requestUrl);//请求连接
                    return requestUrl;
                }
    
                @Override
                public Map<String, String> handlerHeader(Map<String, String> header) {
                    Log.e("aaa","header: "+header.toString());请求 header
                    return header;
                }
    
                @Override
                public String handlerBody(String body) {
                    Log.e("aaa","body: "+body);//请求参数,(get 没有哦,只有 post)
                    return body;
                }
    
                @Override
                public String handlerResponse(String response) {
                    Log.e("aaa","response: "+response);//请求结果
                    return response;
                }
            });
        }
    }
    

    三、参数的传递(form 和 json)

    from形式:

      //方式一:可以单独添加
      FormRequestParameter.create().add("key","value").add("kay","value").....
      //方式二,添加 map 的形式
      FormRequestParameter.create().addMap(Map<String,String> map)
    

    json 形式:

    方式一:map 或者 对象
    JsonRequestParameter.create().json(Object object)
    方式二:拼好的 json 字符串
    JsonRequestParameter.create().jsonSource(String sting)
    

    四、设置全局配置

    设置超时

    public class LightConfig extends RequestConfig {
    
        @Override
        public TimeUnit timeUnit() {
            return TimeUnit.SECONDS;
        }
    
        @Override
        public long callTimeout() {
            return 30 * 1000;
        }
    }
    

    重写RequestConfig类

    • TimeUnit timeUnit():超时的时间计量单位,默认为分钟。

    • long connectTimeout():连接超时时间,默认为1分钟。

    • long writeTimeOut():写数据的超时时间,默认为5分钟。

    • long readTimeout():读数据的超时时间,默认为5分钟。

    • long callTimeout():调用的超时时间,默认为1分钟。

    • RequestInterceptor requestInterceptor():返回一个网络请求的监听器

    提供了很多方法,可以重写,然后在 application ,一行代码就搞定啦,你学会了吗?

    LightHttp.init(new LightConfig());
    

    五、设置 header

    方式一:key value 的形式或者 map

    FormRequestParameter.create().header(String key,String value)
    JsonRequestParameter.create().header(Map<String,String> heade)
    

    方式二:
    LightHttp在OkHttp的基础上额外提供了一个请求拦截器,这个拦截器可以拦截和修改请求所有相关的内容,包括返回值,可以在返回值到达CallBack的时候进行拦截修改。

    setRequestFirstHandler(IRequestFirstHandle requestFirstHandler)
      //这个拦截器可以拦截和修改请求所有相关的内容,
    
    public interface IRequestFirstHandle {
    
        String handlerUrl(String requestUrl);
    
        Map<String,String> handlerHeader(Map<String,String> header);//这里设置 header
    
        String handlerBody(String body);
    
        String handlerResponse(String response);
        
    }
    
    • handlerUrl:这个方法可以在请求之前处理请求的地址,在请求在创建的时候,会将请求地址通过参数一传递给这个方法,这个方法可以处理一下请求地址,例如增加一个请求头,或者修改一下请求地址,然后通过返回值返回即可。
    • handlerHeader:这个方法可以在请求之前处理请求传递的Header,在请求在创建的时候,会将本次请求传递的Header通过参数一传递给这个方法,这个方法可以处理一下本次请求使用的Header,然后通过返回值返回即可。
    • handlerBody:这个方法可以在请求之前处理一下请求要传递的Body,在青丘创建的时候,会将本次请求传递的Body通过参数一传递给这个方法,这个方法处理一下未格式化的请求Body,然后通过返回值进行返回。
    • handlerResponse:这个方法可以在请求结束后处理请求返回的数据,这个方法会在数据进行格式化之前被调用,传递给这个方法的数据是未格式化的原始数据,处理完成后通过返回值的方式返回原始数据,然后LightHttp在进行数据反序列化或者直接调用Callback直接传递给请求方。

    END

    友情免费开放接口API链接:https://www.jianshu.com/p/09111d61cb37

    如有侵权或有问题,请评论,立马删

    相关文章

      网友评论

          本文标题:超简单方便的网络框架LightHttp

          本文链接:https://www.haomeiwen.com/subject/sgenthtx.html