使用MVP+Retrofit+RxJava实现的的Android Demo (上)使用Nuclues库实现MVP

最近写了一个 Android 小 Demo,使用基于Nucleus库的MVP框架进行代码分割,并Retrofit和RxJava进行数据请求和处理,下面通过Demo代码分享下这几种技术的使用方法。

需求

从网络Api获取Json格式的笑话数据,通过列表方式显示,列表分页显示,当上拉到最后一个数据是,自动从网络加载数据并显示,在顶端进行下拉式刷新数据。

最终效果图:
效果图
App下载地址: http://a.app.qq.com/o/simple.jsp?pkgname=chenyu.jokes
微信扫描下载APP:
App二维码
源码地址: https://github.com/zhongchenyu/jokes
由于后续代码可能会做重构,本文介绍的代码保存在 demo1 分支,请 checkout。

MVP简介

项目采用的是MVP框架,MVP分别代表

  • Model:数据接入层,例如数据库API或者远程服务器API。
  • View:显示数据并响应用户操作。在Android系统上可以是Activity、Fragment、android.view.View或者对话框等。
  • Presenter:负责从Model提供数据给View的层,同时处理后台任务。

传统View-Model框架示意图:
View-Model框架

MVP框架示意图:
MVP框架

简单对比传统View-Model和MVP,可以发现MVP框架各个模块直接的耦合度更低,Presenter承接了Data(Model)和View直接的协调工作,Data和View是完全解耦的。

MVP带来很多好处,例如:
- 使项目代码的层次划分更加清晰,对测试和后期维护带来便利
- 减小Activity的复杂度
- 更方便进行后台服务生命周期控制,减少内存溢出的可能

了解更多,参考MVP介绍文章: Introduction to Model View Presenter on Android

MVP实践

定义Model

我们的数据来自于网络API,返回的Json数据格式如下:

{
  "error_code": 0,
  "reason": "Success",
  "result": {
    "data": [
      {
        "content": "同事来我家打麻将,我特意炖了牛肉,心想着打完麻将,肉也炖好了,有吃有玩,其乐融融。但现实是,他们不但吃光了我的牛肉还赢光了我的钱。。。",
        "hashId": "323dea183f2baba507983829b55aeda1",
        "unixtime": 1490873030,
        "updatetime": "2017-03-30 19:23:50"
      },
      {
        "content": "花卷妹妹被包子给欺负了,花卷妹妹生气的说道:“你等着我找我男朋友,他可是一个壮汉,打不死你。”    包子嘲笑道:“你去吧,我等着你!”    不一会儿,花卷妹妹带了馒头哥来到了包子面前,馒头又大又壮。    可是包子上去三拳两脚就把馒头哥打败了。    花卷妹妹哭道:“你这么壮怎么连他都打不过啊?”    馒头哥委屈道:“你有所不知啊,我是酵母发酵的,我这不是壮,这是虚胖啊!”",
        "hashId": "9862276b1b74b4b7df8865e36eaa0349",
        "unixtime": 1490867030,
        "updatetime": "2017-03-30 17:43:50"
      }
    ]
  }
}

依据返回数据格式的嵌套层次,定义了Response、Result、Data 3个Model,用于解析和存储数据。
这里用到了Jackson库做Json数据处理,Parceler库做Parcelable处理。使用方法都很简单,用注解就可以。

package chenyu.jokes.model;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import org.parceler.Parcel;

/**
 * Created by chenyu on 2017/3/3.
 */

@Parcel @JsonIgnoreProperties(ignoreUnknown = true) 
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值