超简单方便的网络框架LightHttp

2020-01-31  本文已影响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类

提供了很多方法,可以重写,然后在 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);
    
}

END

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

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

上一篇下一篇

猜你喜欢

热点阅读