基于retrofit2和rxjava2和谷歌AAC架构的MVVM框架,泛型解析网络数据

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 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值