手写Rxjava+Retrofit+Mvp

本文介绍了如何手写Rxjava、Retrofit和Mvp框架,详细讲解了Mvp的各组成部分,包括Model层的Disposable管理、异常处理、Presenter的创建以及MvpActivity的实现。通过这篇文章,读者可以了解到搭建Mvp框架的全过程,并能实际应用到项目中。
摘要由CSDN通过智能技术生成

手写Rxjava+Retrofit+Mvp

今天来写写我的第一篇博客,分享一下自己手写的Rxjava+Retrofit+Mvp,帮助大家学习,要是有哪些写的不好的地方可以提出来,我虚心接受。

关于什么是Rxjava和Retrofit,两者结合的好处我这里就不在一一概述了,网上有很多大牛写的都很好,这里推荐几篇比较好的博文,大家可以去参考一下,一篇是扔物线大牛写的给Android 开发者的RxJava 详解Android 优雅的让RxJava2.0+Retrofit2.0结合使用。先附上gradle的依赖,以免到时候小伙伴们找到的类会有偏差。

 //rxjava +retrofit
    implementation 'io.reactivex.rxjava2:rxjava:2.1.1'
    implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
    implementation 'com.squareup.retrofit2:retrofit:2.3.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.3.0'
    implementation 'com.squareup.retrofit2:converter-scalars:2.3.0'
    implementation 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'//配合rxjava2
    implementation 'com.squareup.okhttp3:logging-interceptor:3.8.1'//拦截器

本文重点讲述的事如何搭建mvp框架,因为自己比较喜欢架构这一块,尤其是mvp设计模式,简单明了的代码风格和清晰的体系结构受广大程序员的喜欢,最近有去研究了这个模式,加了一些自己的理解,下面就把自己所感所悟分享出来,有哪些写的不好的地方和错误欢迎指出。

什么是mvp

先上个图方便大家的理解
这里写图片描述
mvp(model view presenter)是一种设计模式,在mvc(model view controller)的基础上进行了优化,使得在代码结构上非常的干净和整洁,mvp和mvc相比,mvc的View,controller和model全都写在一个activity里,我相信很多老的android应用应该都是这样写的,这样写的代码比较臃肿,会造成一个界面产生几千行代码的可能,维护起来非常的困难。而mvp架构在代码风格上就完胜mvc,它把View和Model这两块抽离出来,放在单独的模块里,通过presenter这个对象进行交互,降低了代码的耦合度。

一.什么是model

model英文翻译过来就是数据模型,像我们平日里通过网络请求得到的json数据要通过一个实体类进行保存,这个实体类就是我们所说的model数据模型,里面包含业务逻辑这块。当然model你也可以这么去理解,他是获取网络数据的一个类。

如何搭建model层

一.搭建Disposable管理类
1.定义Disposable接口
package com.lcp.lcplibrary.mvp.disposable;

import io.reactivex.disposables.Disposable;

/**
 * Created by lcp on 2018/6/16.
 */
public interface IDisposable {
   
    //添加
    void add(Disposable subscription);
    //取消
    void cancel(Disposable t);
    //取消所有
    void cancelall();
}
2.定义一个Disposable的实现类DisposableManager
package com.lcp.lcplibrary.mvp.disposable;

import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.disposables.Disposable;

/**
 * Created by lcp on 2018/6/16.Disposable管理类
 */
public class DisposableManager implements IDisposable {
   
    private static DisposableManager subscriptionManager;
    private CompositeDisposable mDisposables;

    private DisposableManager() {
        if (mDisposables == null) {
            mDisposables = new CompositeDisposable();
        }
    }

    @Override
    public void add(Disposable disposable) {
        if (disposable == null) return;
        mDisposables.add(disposable);
    }

    @Override
    public void cancel(Disposable disposable) {
        if (mDisposables != null) {
            mDisposables.delete(disposable);
        }
    }

    @Override
    public void cancelall() {
        if (mDisposables != null) {
            mDisposables.clear();
        }
    }

    public static DisposableManager getInstance() {
        if (subscriptionManager == null) {
            subscriptionManager = new DisposableManager();
        }
        return subscriptionManager;
    }
}
二.定义异常处理类
package com.lcp.lcplibrary.mvp.error;

/**
 * Created by lcp on 2018/6/16.错误信息的实体类
 */
public class ErrorBodyDTO {
   
    private String errCode;
    private String errMsg;

    public String getErrCode() {
        return errCode;
    }

    public void setErrCode(String errCode) {
        this.errCode = errCode;
    }

    public String getErrMsg() {
        return errMsg;
    }

    public void setErrMsg(String errMsg) {
        this.errMsg = errMsg;
    }
}
package com.lcp.lcplibrary.mvp.error;

import android.net.ParseException;

import com.google.gson.Gson;
import com.google.gson.JsonParseException;

import org.json.JSONException;

import java.io.IOException;
import java.net.ConnectException;

import okhttp3.ResponseBody;
import retrofit2.HttpException;

/**
 * Created by lcp on 2018/6/16.异常处理类
 */
public class ExceptionHandle {
   
    private static final int UNAUTHORIZED = 401;
    private static final int FORBIDDEN = 403;
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值