XMvp 👋
An easy to use MVP frame using in the Java
这是一个基于 Java
的简单易用,利用快速开发的 MVP
框架
一. 优势
-
基于
MVP
框架,能够有效降低代码的耦合度 -
内置
Retrofit
+RxJava2
+ButterKnife
+Glide
+BaseRecyclerViewAdapterHelper
无需手动引入 -
内置
Cookie
持久化,无需担心登陆注册的问题 -
内置自动显示加载中和自动关闭加载中的功能,无需手动编写,可选开启与否
-
内置自动处理异常基类
-
内置一系列工具
下面将会详细介绍
- 优美封装
RetrofitService
,让你使用起来得心应手 - 优美封装
RxJava
,封装简化回调,让你享受自动化和简约的快乐
二. 使用
2.1 基本配置
- 在根目录的
build.gradle
中引入maven
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
- 在
app\build.gradle
中设置使用Java8
,并引入butterknife-compiler
和XMvp
框架
注意:
butterknife-compiler
一定要按照我给的版本号填写,以免出现版本不兼容的BUG
implementation 'com.github.LoveLifeEveryday:XMvp:1.0.2'
annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.0'
2.2 开始使用
BaseApplication
2.2.1.配置 新建一个类(名字不限),extends
自 XMvp
,在 initBaseUrl
中填入 BASE_URL
public class BaseApplication extends XMvp {
@Override
public String initBaseUrl() {
return Contants.BASE_URL;
}
}
注意:记得在
manifest
中指定Application
API
2.2.2 新建一个网络请求
example
如下
public interface LoginApi {
//登录
@FormUrlEncoded
@POST("user/login")
Observable<XBaseBean<User>> login(@Field("username") String username, @Field("password") String password);
}
2.2.3 新建对应的实体类
- 这里的带有嵌套的实体类看似很复杂,可以通过一个
GsonFormat
插件一键生成- 但需要注意的是:不要将
BaseBean
的那一层导入到实体类中
public class User {
/**
* collectIds : []
* email :
* icon :
* id : 3
* password : 111111
* type : 0
* username : 111111
*/
public String email;
public String icon;
public int id;
public String password;
public int type;
public String username;
public List<?> collectIds;
public String repassword;
}
View
接口
2.2.4 编写 注意的是,需要继承
XBaseView
public interface ILoginView extends XBaseView {
/**
* 显示登陆成功
*
* @param successMessage 成功信息
*/
void showLoginSuccess(String successMessage);
/**
* 显示登陆失败
*
* @param errorMessage 失败信息
*/
void showLoginFailed(String errorMessage);
void doSuccess();
}
Presenter
2.2.5 编写 注意:
Presenter
需要extends
XBasePresenter <这里填入你上面写的 View 接口>
new XBaseObserver
一定要填写明确的泛型这里可选网络请求时是否自动开启加载中
new XBaseObserver<XBaseBean<User>>(baseView)
默认为不开启
new XBaseObserver<XBaseBean<User>>(baseView, true)
为开启
public class LoginPresenter extends XBasePresenter<ILoginView> {
LoginPresenter(ILoginView baseView) {
super(baseView);
}
void login(String userName, String password) {
XUtil.closeSoftKeyboard();
addDisposable(retrofitService.createRs(LoginApi.class).login(userName, password),
//这里第二个参数可选,默认为不开启 加载中
//设置为 true ,则开启加载中
new XBaseObserver<XBaseBean<User>>(baseView, true) {
@Override
public void onSuccess(XBaseBean<User> bean) {
baseView.showLoginSuccess("登录成功( ̄▽ ̄)");
baseView.doSuccess();
}
@Override
public void onError(String msg) {
baseView.showLoginFailed(msg + "(°∀°)ノ");
}
});
}
}
Activity
2.2.6 编写 注意:
Activity
需要extends
XBaseActivity<这里填你上面的 Presenter>
Activity
需要implements
你上面写的View
接口
public class MainActivity extends XBaseActivity<LoginPresenter> implements ILoginView {
@BindView(R.id.et_name)
EditText mEtName;
@BindView(R.id.et_password)
EditText mEtPassword;
@BindView(R.id.btn_login)
Button mBtnLogin;
@Override
protected LoginPresenter createPresenter() {
return new LoginPresenter(this);
}
@Override
protected int getLayoutId() {
return R.layout.activity_main;
}
/**
* 初始化布局信息,比如: mHomeRecyclerView.setLayoutManager(new LinearLayoutManager(this));
*/
@Override
protected void initView() {
}
/**
* 初始化数据信息,比如:presenter.getArticleList();
*/
@Override
protected void initData() {
}
@Override
public void showLoginSuccess(String successMessage) {
ToastUtil.showToast(successMessage);
}
@Override
public void showLoginFailed(String errorMessage) {
ToastUtil.showToast(errorMessage);
}
@OnClick(R.id.btn_login)
public void onViewClicked() {
presenter.login(mEtName.getText().toString(), mEtPassword.getText().toString());
}
}
2.3 工具类说明
为了开发的便捷与简约,笔者添加了一些常用的工具类,下面将为大伙一一道来
ActivityUtil
2.3.1 Activity
跳转
/**
* 不用 finish 当前 Activity 时直接调用此方法
*
* @param classes 跳转到的 Activity 的 Class
*/
public static void startActivity(Class classes)
/**
* 需要 finish 当前 Activity 时调用此方法,布尔值参数传入 true
*
* @param classes 需要打开的 activity
* @param isFinish 是否 finish 当前 activity
*/
public static void startActivity(Class classes, boolean isFinish)
Activity
关闭
/**
* 结束当前 activity
*
* @param activity activity
*/
public static void finishActivity(Activity activity)
/**
* 关闭所有 Activity
*/
public static void closeAllActivity()
LogUtil
2.3.2 - 设置
Log
开关
public static void setIsLog(boolean isLog)
- 各种
Log
方法
LogUtil.i(TAG,String)
LogUtil.d(TAG,String)
LogUtil.e(TAG,String)
SpUtil
2.3.3 set/get
方法
具体可以看下源码:SpUtil
ToastUtil
2.3.4 public static void showToast(final String msg)
public static void showCenterToast(final String msg)
public static void cancelToast()
XUtil
2.3.5 public static void closeSoftKeyboard()
上面的工具类说明,只是大致说明下主要方法,如果想要更详细了解的话,可以看下笔者的源码:XMvp.Util
Demo
完整示例 口说无凭,笔者特别准备了一个
Demo
给各位读者,喜欢的可以去看下:XMvpDemo
How to create this
如果你也想封装一套这样的框架的话,笔者特地写了一篇文章,里面阐述了笔者创建这套框架的思路
带你封装自己的 MVP+Retrofit+RxJava2 框架(二)
Author
👤 许朋友爱玩
Github
: https://github.com/LoveLifeEveryday/- 个人博客:http://xcynice.xyz/
- 掘金:https://juejin.im/user/5e429bbc5188254967066d1b/posts
Show your support
Give a ⭐️ if this project helped you!
求星星⭐️,求赞👍