XHttp--轻量级网络框架

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/QQ243223991/article/details/53032708

联系方式

博客地址:http://blog.csdn.net/qq243223991
Github地址:https://github.com/anqiansong/XHttpSample

XHttpSample

XHttp一个轻量级网络工具类,基于OKGo封装的一个简单、实用的网络请求工具,此工具因继承自OkGo,查看 OkGo便知,不能和OkHttp同时引用, 会导致冲突,在本工具中采用 是fastjson 1.2.9版本进行json解析的,因此在依赖过程中请勿重复依赖fastjson.

Callback

public abstract class Callback<T> {// 根据需要返回的类型指定泛型
    /**
     * 成功返回结果
     *
     * @param t
     */
    public abstract void onSuccess(T t);

    /**
     * 失败返回结果,非必要实现
     *
     * @param errorInfo
     */
    public void onFailed(ErrorInfo errorInfo) {

    }

    /**
     * 上传进度,当需要上传文件时调用
     * @param currentSize 当前已上传的文件大小(单位:kb)
     * @param totalSize 需要上传的文件大小(单位:kb)
     * @param progress 当前上传进度(0-1)
     * @param networkSpeed 当前上传网速(单位秒)
     */
    public void onUploadProgress(long currentSize, long totalSize, float progress, long networkSpeed){

    }
    /**
     * 下载进度,当需要下载文件时调用
     * @param currentSize 当前已上传的文件大小(单位:kb)
     * @param totalSize 需要上传的文件大小(单位:kb)
     * @param progress 当前上传进度(0-1)
     * @param networkSpeed 当前上传网速(单位秒)
     */
    public void onDownloadProgress(long currentSize, long totalSize, float progress, long networkSpeed){

    }
}

注意事项

在使用XHttp进行网络请求之前,需要调用init(Application)对其进行一次初始化,此 初始化建议在Application中进行,在初始化过程中,对默认配置进行了初始化,如果用户不满足默认参数配置,可以调用对应的方法进行设置, 建议在Application进行全局设置.默认配置中的超时间为15秒, 对Cookie进行了持久化处理.

使用方法

gradle引用

compile 'com.android.anqiansong:xhttp:1.0.0'

1.在Application中初始化

public class UApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        XHttp.init(this);// 初始化
    }
}

2.根据需要进行参数配置

注意 :此过程尽量在Appcation中进行设置
设置超时时间
 setTimeOut(int)单位:秒,默认为15秒
 添加全局headers
 addHeaders(HashMap) 
 设置是否缓存
 setCache(boolean) true:缓存,false: 不缓存
 设置缓存模式
 setCacheMode(CacheMode)
 DEFAULT // 按照HTTP协议的默认缓存规则,例如有304响应头时缓存
 NO_CACHE // 不使用缓存
 REQUEST_FAILED_READ_CACHE// 请求网络失败后,读取缓存
 IF_NONE_CACHE_REQUEST// 如果缓存不存在才请求网络,否则使用缓存
 FIRST_CACHE_THEN_REQUEST //先使用缓存,不管是否存在,仍然请求网络
 设置证书
 setCertificates(InputStream)
 注:如果每个请求的header不一样,亦可以单独设置header,如:
 XGet xGet = new XGet();
 xGet.requestUrl = Constant.JOKE_URL; // 请求地址
 HashMap<String, String> headers = new HashMap<>();
 headers.put("apikey", Constant.APP_KEY);
 xGet.requestHeaders = headers;
 XHttp.request(xGet, new Callback<String>() {
     @Override
     public void onSuccess(String s) {
         Log.d(TAG, s);
     }
 });

3.Get请求

获取json字符串
 XGet xGet = new XGet();
 xGet.requestUrl = Constant.JOKE_URL;// 请求地址
 // 根据需要配置请求参数和headers
 // xGet.requestString = "?page=1";
 // HashMap<String, String> headers = new HashMap<>();
 // headers.put("apikey", Constant.APP_KEY);
 // xGet.requestHeaders = headers;
  XHttp.request(xGet,Callback<String>(){// 这里需要指定泛型为String
     @Override
     public void onSuccess(String s) {
        // TODO dosometing
     }
  })
获取Bitmap
XBitmap xBitmap = new XBitmap();
xBitmap.requestUrl = Constant.PIC; // 请求地址
// 根据需要配置请求参数和headers
// xGet.requestString = "?page=1";
// HashMap<String, String> headers = new HashMap<>();
// headers.put("apikey", Constant.APP_KEY);
// xGet.requestHeaders = headers;
XHttp.request(xBitmap, new Callback<Bitmap>() {// 泛型需要指定为Bitmap
    @Override
    public void onSuccess(Bitmap bitmap) {
        iv_image.setImageBitmap(bitmap);
    }
});
获取实体(即直接返回解析后的数据实体)
 XGet xGet = new XGet();
 xGet.requestUrl = Constant.JOKE_URL; // 请求地址
 // 根据需要配置请求参数和headers
 // xGet.requestString = "?page=1";
 // HashMap<String, String> headers = new HashMap<>();
 // headers.put("apikey", Constant.APP_KEY);
 // xGet.requestHeaders = headers;
  XHttp.request(xGet,Callback<JokeResponse>(){// 这里需要指定泛型为String
     @Override
     public void onSuccess(JokeResponse response) {// JokeResponse为你的javabean
        // TODO dosometing
     }
  })

4.POST请求

基本的post请求,key-value参数,获取json或者实体
XPost xPost = new XPost();
xPost.requestUrl = Constant.JOKE_URL;// 请求地址
// 根据需要配置
// HashMap<String,String> headers = new HashMap<>();
// headers.put("apikey", Constant.APP_KEY);
// xPost.requestHeaders = headers;
// HashMap<String,Object> params = new HashMap<>();
// params.put("page",1);
// xPost.params = params;
XHttp.request(xPost, new Callback<String>() {// 可以根据需要直接返回未具体的javabean实体,只要将泛型指定为对应的java实体类即可
    @Override
    public void onSuccess(String json) {
        // TDDO dosomething
    }
});
Post请求,上传json数据
XPostJson xPost = new XPostJson();
xPost.requestUrl = Constant.JOKE_URL;// 上传地址
// 根据需要配置
// HashMap<String,String> headers = new HashMap<>();
// headers.put("apikey", Constant.APP_KEY);
// xPost.requestHeaders = headers;
// 转换为json,然后作为参数发起post请求
HashMap<String,Object> params = new HashMap<>();
String json = JSON.toJSONString(params);
xPost.requestJson = json;
XHttp.request(xPost, new Callback<String>() {// 可以根据需要直接返回未具体的javabean实体,只要将泛型指定为对应的java实体类即可
    @Override
    public void onSuccess(String json) {
        // TDDO dosomething
    }
});
Post请求,上传String数据
XPostString xPost = new XPostString();
xPost.requestUrl = Constant.JOKE_URL;//  上传地址
// 根据需要配置
// HashMap<String,String> headers = new HashMap<>();
// headers.put("apikey", Constant.APP_KEY);
// xPost.requestHeaders = headers;
// 转换为json,然后作为参数发起post请求
String data = "待上传的字符串";
xPost.string = data;
XHttp.request(xPost, new Callback<String>() {// 可以根据需要直接返回未具体的javabean实体,只要将泛型指定为对应的java实体类即可
    @Override
    public void onSuccess(String json) {
        // TDDO dosomething
    }
});

5.上传文件

说明:支持多文件上传,需要重写onUploadProgress方法

XUploadFile xUploadFile = new XUploadFile();
xUploadFile.requestUrl = Constant.JOKE_URL;//  上传地址
// 根据需要配置
// HashMap<String,String> headers = new HashMap<>();
// headers.put("apikey", Constant.APP_KEY);
// xUploadFile.requestHeaders = headers;
// HashMap<String,Object> params = new HashMap<>();
// params.put("page",1);
// xUploadFile.params = params;
File file = getFile();// 选择文件
List<File> files = new ArrayList<>();
files.add(file);
HashMap<String,<List<File>>> filesData = new HashMap<>();
xUploadFile.files = filesData;
XHttp.request(xUploadFile, new Callback<String>() {
    @Override
    public void onSuccess(String s) {
        // TODO dosometing
    }
    @Override
    public void onUploadProgress(long currentSize, long totalSize, float progress, long networkSpeed) {
        super.onUploadProgress(currentSize, totalSize, progress, networkSpeed);
        // TODO dosomething
    }
});

6.下载文件

注:如果需要查看下载进度务必要重写onDownloadProgress方法

XDownloadFile xDownloadFile = new XDownloadFile();
xDownloadFile.requestUrl = Constant.JOKE_URL;// 下载地址
// 根据需要配置
// HashMap<String,String> headers = new HashMap<>();
// headers.put("apikey", Constant.APP_KEY);
// xDownloadFile.requestHeaders = headers;
XHttp.download(xDownloadFile,"/SD/download","meituan.apk", new Callback<String>() {
    @Override
    public void onSuccess(String s) {
        // TODO dosometing
    }

    @Override
    public void onDownloadProgress(long currentSize, long totalSize, float progress, long networkSpeed) {
        super.onDownloadProgress(currentSize, totalSize, progress, networkSpeed);
        // TODO dosometing
    }
});

后序

感谢

jeasonlzy

引自: jeasonlzy github地址  如果有错误,希望大家支出 邮箱: [email protected]

猜你喜欢

转载自blog.csdn.net/QQ243223991/article/details/53032708
今日推荐