博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于MVP,集成了RxJava+Retrofit+TabLayout+ButterKnife的天气类App的实现
阅读量:6389 次
发布时间:2019-06-23

本文共 3127 字,大约阅读时间需要 10 分钟。

GitHub 地址:

legleg 是什么?

legleg-腿腿,是一个基于 MVP 结构,集成了 RxJava、Retrofit、TabLayout、ButterKnife 开源库,而实现一个天气预报查询类 APP。

为什么叫 legleg?

虽然这是个天气预报 APP,但创建工程的目的是为了学习如何将

MVP + RxJava + Retrofit + TabLayout + ButterKnife 集成在一起使用。

笔者认为以上开发模式和开源库就像是两条腿一样有力,它们的组合为开发项目提供了充足的动力,使得整个开发更加便捷。

项目结构

包名以下是:

  • base —— 一些全局使用的工具类和 Application等。
    • adapter —— 适配器类
    • util —— 工具类
  • http —— 与网络请求相关类
  • mvp
    • model —— 数据模型
    • presenter —— 处理事务
    • view 这里的 view 用来存放 V 与 P 之间的接口文件
  • ui
    • ac —— Activity 类
    • customViews —— 自定义视图类
    • fragment —— Fragment 类
    • dialog —— Dialog 类

使用

MVP

legleg 以天气预报接口为例,实现在 Fragment 中与 Presenter 绑定并发送网络请求。

这里的示例比较简单,在实际的项目中会有更多的事务处理,都可以在 MainView 中加接口方法来实现。

另外在 Activity 和 Dialog 中绑定 Presenter,工程中没有写出来,但实现方式和 Fragment 相同,原理即将 V 和 P 互相绑定。

V - MvpFragment, WeatherFragment

P - BasePresenter, WeatherPresenter

V 得到 P 的对象,mvpPresenter:

public abstract class MvpFragment

extends BaseFragment { protected P mvpPresenter; @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); mvpPresenter = createPresenter(); } protected abstract P createPresenter();复制代码

public class WeatherFragment extends MvpFragment
implements MainView
{@Override protected WeatherPresenter createPresenter() { return new WeatherPresenter(this); }复制代码

可以看到是在父类的抽象方法中直接 new 出来的。

并传了一个 this 对象过去。因为 WeatherFragment 实现了 MainView 接口,所以传过去的 this,是一个 MainView 对象。

P 得到 V 的对象,mvpView:

public class WeatherPresenter extends BasePresenter
{ public WeatherPresenter(MainView mainView){ attachView(mainView); }复制代码
public class BasePresenter
{ public V mvpView; public void attachView(V mvpView) { this.mvpView = mvpView; apiStores = ApiClient.retrofit().create(ApiStores.class); }复制代码

RxJava

在 legleg 工程中,RxJava 仅被用作网络请求,但 RxJava 的威力远不止于此。

工程中用到 RxJava 的地方在 BasePresenter 类中

observable.subscribeOn(Schedulers.io())                .observeOn(AndroidSchedulers.mainThread())                .subscribe(observer);复制代码
  • observable —— 被观察者,即网络请求发起者;
  • subscribeOn —— 设置被观察者在什么线程运行;
  • Schedulers.io() —— 用于耗时操作,如读写文件,数据库存取,网络通信等。这个调度器根据需要,增加或者减少线程池中的线程数量。需要注意的是 Schedulers.io() 中的线程池数量是无限制大的,大量的 I/O 操作将创建许多线程,我们需要在性能和线程数量中做出取舍。
  • observeOn —— 设置观察者在什么线程运行;
  • AndroidSchedulers.mainThread() —— 主线程;
  • subscribe —— 订阅,即网络请求订阅回调;
  • observer —— 观察者,即回调。

RxJava2 博大精深,这里就不对操作符做一一介绍了,用搜索引擎可以搜到 RxJava2 的操作符。

英语好的同学可直接看官方的操作符说明。

Retrofit

Retrofit 的使用在工程中的 ApiStores 类中列出了一些常用的请求方式。

主要有:

@GET("api/test")Observable
> apiTest(@QueryMap Map
params);复制代码

常用 GET 请求方式

@POST("api/test")Observable
> apiTest(@Body Map
params);复制代码

常用 POST 请求方式

@FormUrlEncoded@POST("api/test")Observable
> apiTest(@FieldMap Map
params);复制代码

表单 POST 请求方式

@GET@StreamingObservable
apiDownloadFile(@Url String fileUrlStr);复制代码

文件下载 GET 请求方式

还可以把 url 放到方法中,如:

@GETObservable
> apiTest(@Url String url, @QueryMap Map
params);复制代码

写在后面

演示

记录在此,仅为学习!

感谢您的阅读!欢迎指正!

转载地址:http://hpdha.baihongyu.com/

你可能感兴趣的文章
bulk collect 以及ref cursor使用
查看>>
mysql性能优化-慢查询分析、优化索引和配置
查看>>
图解分布式一致性协议Paxos
查看>>
Jedis与Redisson选型对比
查看>>
MongoDB学习笔记(查询)
查看>>
freemarker自定义标签的写法和使用
查看>>
使用Gitlab CI进行持续集成
查看>>
Win32编程基本概念
查看>>
×××灯式样的站点链接说明,链接提示
查看>>
Linux下动态IP和静态IP的设置方法
查看>>
mysql 行长度
查看>>
SUSE配置网关
查看>>
java中获取字母和数字的组合
查看>>
8-3 泛型
查看>>
你是“职业”软件开发吗?——书评《浮现式设计-专业软件开发的演进本质》...
查看>>
iOS 多线程 之 GCD(大中枢派发)(二)
查看>>
开源项目 log4android 使用方式详解
查看>>
ssh命令详解
查看>>
C# 中字符串转换成日期
查看>>
垃圾短信相关用户细分方案
查看>>