git地址:https://github.com/mazwu110/libhttpapiMvvmDemo
好久没有写android方面的文章了,现在贡献一下自己封装的基于retrofit2和rxjava2的泛型网络通信框架 libhttpapi,本框架有以下特点:
1. 在MVVM架构中只有一个model供所有的VM使用,减少了model编写的代码量和文件数,更方便维护,本来VM本人也想封装成泛型,但是估计是做不到,因为一个VM就是一个从V中分离出来的。用于逻辑数据处理的,每个页面都不一样,只有M可以做到泛型解析数据。
2. retrofit2 针对的网络请求接口封装只有一个HttpApiService,里面只有几个get,post,uploadFile,uploadFiles等方法,但是几乎够了所有的请求使用
使用方式:
发送get请求:次方法可以定义在VM中,也可以定义在您的(MVP)的P中
// 需要泛型解析的调用方式
public void doGet() {
Map<String, Object> params = new HashMap<>();
params.put("city", "北京");
params.put("key", "0132423b3e085efed24b7b8f00d83a91");
// 第三个参数,需要用到哪个类解析数据结果就传哪个类进去就行,这里采用了泛型解析
QHttpApi.doGet(Constants.getWeather, params, WeatherBean.class, HttpWhatConfig.CODE_10, MainActivityVM.this);
}
不需要泛型解析,需要自己解析所有的可以调用:这样后台返回的所有包括CODE在内的都可以自己解析了
public void doStrGet() {
Map<String, Object> params = new HashMap<>();
params.put("city", "北京");
params.put("key", "0132423b3e085efed24b7b8f00d83a91");
QHttpApi.doStrGet(Constants.getWeather, params, HttpWhatConfig.CODE_10, MainActivityVM.this);
}
发送POST请求:
A. key-value格式的
public void doPost() {
// 另外有QHttpApi.doStrGet方法可用,此返回是后台返回什么,解析出就直接返回给您,需要您自己接受了解析,包括CODE等都返回来了
Map<String, Object> params = new HashMap<>();
params.put("city", "上海");
params.put("key", "0132423b3e085efed24b7b8f00d83a91");
// 第三个参数,需要用到哪个类解析数据结果就传哪个类进去就行,这里采用了泛型解析
QHttpApi.doPost(Constants.getWeather, params, WeatherBean.class, HttpWhatConfig.CODE_11, MainActivityVM.this);
}
B. 发送JSON参数的
public void doJsonPost() {
// 另外有QHttpApi.doStrGet方法可用,此返回是后台返回什么,解析出就直接返回给您,需要您自己接受了解析,包括CODE等都返回来了
Map<String, Object> params = new HashMap<>();
params.put("city", "上海");
params.put("key", "0132423b3e085efed24b7b8f00d83a91");
// 第三个参数,需要用到哪个类解析数据结果就传哪个类进去就行,这里采用了泛型解析
QHttpApi.doJsonPost(Constants.getWeather, params, WeatherBean.class, HttpWhatConfig.CODE_11, MainActivityVM.this);
}
解析部分全部类似
@Override
public void onSuccess(int what, Object data) {
switch (what) {
case HttpWhatConfig.CODE_10: {
// 使用请求数据的时候的class反解析就行
WeatherBean bean = (WeatherBean) data;
ArrayList<FutureBean> list = bean.getFuture();
// 清除数据,然后刷新, 如果您做的是分页,可以使用 mAdapter.addMoreRecordList(list);
mAdapter.addRecordList(list);
break;
}
// 数据格式一样 就拷贝上面的解析了
case HttpWhatConfig.CODE_11:
// 使用请求数据的时候的class反解析就行
WeatherBean bean = (WeatherBean) data;
ArrayList<FutureBean> list = bean.getFuture();
// 清除数据,然后刷新, 如果您做的是分页,可以使用 mAdapter.addMoreRecordList(list);
mAdapter.addRecordList(list);
break;
}
}
总之使用方式DEMO中都有,不懂的可以qq一起讨论: QQ 315145320