/MVPHabit

一套适合敏捷开发,基于MVP模式开发框架,整合Rxjava+Retrofit+Dagger+Butterknife等主流模块,加入中一些比较常用的工具类,进行一些抽取和整理,让你更专注于业务自身的逻辑。demo给出相应的架构例子,可自行下载查看。

Primary LanguageJavaApache License 2.0Apache-2.0

MVPHabit

简介

  基于MVP模式开发框架,整合Rxjava+Retrofit+Dagger+Butterknife等主流模块,加入中一些比较常用的工具类,进行一些抽取和整合。有人会说有市面上已经MVPArms框架封装不是挺好的,我只能告诉你,那个太冗余了,很多没必要的东西太多,本框架主要是轻量级,少冗余,可扩展性高一些。demo给出相应的架构例子,可自行下载查看。如果你觉得框架的某些代码有帮助到你,请你star支持一下,作者会一直维护,非常感谢!

1. 准备工作

1.1 依赖Library

远程依赖

在根目录的build.gradle中加入

   allprojects {
        repositories {
            ...
            maven { url 'https://www.jitpack.io' }
        }
    } 

在主项目app的build.gradle中依赖

    dependencies {
                //x.x.x自行更换最新版本
    	        implementation 'com.github.zhanghacker:MVPHabit:x.x.x'
    	}

或本地依赖

下载例子程序,在主项目app的build.gradle中依赖例子程序中的MVPLib:

    dependencies {	
        ...
        implementation project(':MVPLib')
    }

如果不是远程依赖,而是下载的例子程序,那么还需要将例子程序中的config.gradle放入你的主项目根目录中,然后在根目录build.gradle的第一行加入:

   apply from: "config.gradle" 

2. 快速上手

2.1 初始化项目

//初始化项目在Applicatin里面调用
 HelperConfig.init(this)
 //文件名称:"MVPHabit-Exception-"+time + ".txt"  文件名称
 //默认路径:SDCard/Android/data/你的应用包名/cache/目录 ->默认的扑捉异常路径
 .addCrashException()
 //自定义文件或路径
 //T->file或crashDirPath
 //M->捕捉回调方法
 .addCrashException(T,M);

2.2 第一个Activity

   MVP大家应该比较熟悉,我们把MP合并P,只用到VP。正常的MVP要有TestActivity、Testcontract、Testpresenter;如果你集成dagger要多两个Testcompanet、TestModule(瞄一眼上面个个类名称,等下下面例子会用到哦)。建议使用:dagger,接下来例子也是按这个来举例。

注意:如果你使用dagger,请自行在app的buidle.gradle添加

annotationProcessor 'com.google.dagger:dagger-compiler:2.17'

2.2.1 继承Base

TestActivityr继承BaseDaggerActivity

public class TestActivity extends BaseDaggerActivity<TestPresenter> implements TestContract.View {
	......
}

BaseDaggerActivity是一个抽象类,需要传入一个泛型参数,就是上面TestPresenter参数

重写BaseDaggerActivity三个抽象方法,还有几个可选方法

@Override
public int getContentLayout() {
	//必须实现方法
    return R.layout.activity_test;
}

@Override
protected void initInjector() {
    super.initInjector();
	//可选实现方法,如果有传入TestPresenter就可以在此方法注入注解
    DaggerTestComponent.builder()
            .testModule(new TestModule(this))
            .build().inject(this);
}

@Override
public void bindView(View view, Bundle savedInstanceState) {
	//必须实现方法
}

@Override
public void initData() {
	//必须实现方法
}

TestPresenter继承BasePresenter

public class TestPresenter extends BasePresenter implements TestContract.Presenter {

	private TestContract.View mView;

	@Inject
	public TestPresenter(TestContract.View view) {
    	this.mView = view;
	}

	@Override
	public void getData() {
	}
}

Fragment的使用和Activity的使用方法差不多,如果不懂详细请参考demo。

2.3 Testpresenter中的网络请求方法

//mCompositeDisposable管理生命周期,只要添加进去,其它交给BaseDaggerActivity去处理
mCompositeDisposable.add(SingletonRxRetrofit.getInstance()
            .getApi().login("15880858837")
            .compose(RxUtils.schedulersTransformer())
            .subscribe((String entity) -> mView.loadDataSuccess(entity),
                    ex -> mView.loadDataSuccess(ex.toString())))

2.4 绑定控件和点击事件(非必要,如果你使用butterknife,不然就正常使用)

@BindView(R.id.button)
Button mButton;
@BindView(R.id.textView)
TextView mTextView;

@OnClick(R.id.button)
public void onViewClicked() {
}

无需再去 unbinder =ButterKnife.bind(this, view)、 unbinder.unbind();

注意:使用如果你使用butterknife,请自行在app的buidle.gradle添加

annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'

2.5 网络工具的配置

//请求案例
//使用有种方式:
//1.如果有使用注解框架 比如:dagger框架,写在全局application的Module使用设置成单例
//2.自行写一个单例工具类
UserApi userApi = RetrofitUtil.Builde.create("http://xxx.xxx.xx.xx:8011/")
					.addCustomConverter(T)//添加插值器,对数据解析进行拦截处理
                    .addCustomInterceptor(T,E)//添加拦截器,对请求,和接收进行处理
                    .addSSL()//添加https验证
                    .addSSL("SSL的ca证书字符串")//添加https验证
                    .addCookiePersistence()//添加持久化
                    .build(UserApi.class);
        
userApi.login(mobile,password)
       .compose(RxUtils.schedulersTransformer())
       .subscribe(entity->{
              Log.e("tag",entity);
           },ex->{
               Log.e("tag",ex.toString());
         });

3. 辅助工具内容

  • SP(SharedPreferences工具)
  • T(Toast吐司工具)
  • RegexUtils(正则表达工具)
  • PermissionsTool(权限申请工具)
  • SizeUtils.(尺寸相关工具)
  • KeyboardUtils(软键盘工具)
  • EncodeUtils(编码工具)
  • EncryptUtils(解密解密工具)
  • ImageUtils(图片操作工具)
  • CrashUtils(异常捕捉工作)

混淆

请参考MVPLib目录下的proguard-rules.pro文件,包含MVPHabit中依赖的所有第三方library。

可参考博文

继续更新中...

About us

  喜欢尝鲜,主要从事安卓,业余时间搞搞PythonWeb(个人博客正在建站中),小程序等。对于项目我会一直更新维护,如果你感兴趣,请star一下。