我是这样理解的
首先一个界面先看看需要哪些操作 ,已注册登录为例子
注册界面 一般有获取验证码,和注册的操作。界面上大概就是这几种,获取验证码成功,失败,注册成功失败,显示loading和隐藏而已。
那我就先写个interface -RegistView
RegistView
/**
* 注册视图
* Created by wushange on 2016/06/01.
*/
public interface RegistView {
/**
* 获取验证码成功
*/
void OnShowSuccessGetCodeView();
/**
* 获取验证码失败
*/
void OnshowFailGetCodeView();
/**
* 注册成功
*
* @param user
*/
void onShowSuccessRegistView(String user);
/**
* 注册失败
*/
void onShowFailedRegistView();
/**
* 显示loading
*/
void showLoadingView();
/**
* 隐藏loading
*/
void dissLoadingView();
}
有了接口就要实现他了,那就简单了,写个manager管理类, 这里面是真正的业务处理,所有的异步操作放在这里执行。比如登录 ,注册,获取验证码。
LoginAndRegistMananger
import com.dmcc.dmcc_crm.bean.User;
import org.xutils.common.util.LogUtil;
/**
* 业务处理层
*/
public class LoginAndRegistMananger {
/**
* 获取验证码回掉
* 需要什么参数自己添加就可以
*/
public interface OnGetCodeLisener {
void getCodeSuccess();
void getCodeFail();
}
/**
* 注册相关 回掉
* 需要什么参数自己添加就可以
*/
public interface OnRegistLisener {
void registSuccess(String user);
void registFailed();
}
/**
* 登录相关 回掉
* 需要什么参数自己添加就可以
*/
public interface OnLoginListener {
void loginSuccess(User user);
void loginFailed();
}
public void getCode(final String phone, final OnGetCodeLisener onGetCodeLisener) {
LogUtil.e("---模拟子线程耗时操作----");
new Thread() {
@Override
public void run() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
LogUtil.e("--- 模拟获取验证码成功----");
onGetCodeLisener.getCodeSuccess();
}
}.start();
}
public void regist(final String username, final String password, final String code, final OnRegistLisener onRegistLisener) {
LogUtil.e("---模拟子线程耗时操作----");
new Thread() {
@Override
public void run() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
LogUtil.e("--- 模拟注册成功----");
onRegistLisener.registSuccess("注册成功");
}
}.start();
}
public void login(final String username, final String password, final OnLoginListener loginListener) {
LogUtil.e("---模拟子线程耗时操作----");
new Thread() {
@Override
public void run() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
LogUtil.e("--- 模拟登录成功----");
if ("111".equals(username) && "111".equals(password)) {
User user = new User();
user.setUserName(username);
user.setPassword(password);
loginListener.loginSuccess(user);
} else {
loginListener.loginFailed();
}
}
}.start();
}
然后再写个presenter类 这个是activity层 获得数据的(我是这样子理解的)
LoginAndRegistPresenter实现
import com.dmcc.dmcc_crm.bean.User;
import com.dmcc.dmcc_crm.view.LoginView;
import com.dmcc.dmcc_crm.view.RegistView;
/**
* p层
*/
public class LoginAndRegistPresenter {
RegistView registView;
LoginView loginView;
LoginAndRegistMananger loginAndRegistMananger;
/**
* 登陆界面构造器
*
* @param loginView
*/
public LoginAndRegistPresenter(LoginView loginView) {
this.loginView = loginView;
this.loginAndRegistMananger = new LoginAndRegistMananger();
}
/**
* 注册界面构造器
*
* @param registView
*/
public LoginAndRegistPresenter(RegistView registView) {
this.registView = registView;
this.loginAndRegistMananger = new LoginAndRegistMananger();
}
/**
* 获取验证码
* @param phone
*/
public void getCode(String phone) {
registView.showLoadingView();
loginAndRegistMananger.getCode(phone, new LoginAndRegistMananger.OnGetCodeLisener() {
@Override
public void getCodeSuccess() {
registView.OnShowSuccessGetCodeView();
registView.dissLoadingView();
}
@Override
public void getCodeFail() {
registView.OnshowFailGetCodeView();
registView.dissLoadingView();
}
});
}
/**
* 注册
* @param name
* @param password
* @param code
*/
public void regist(String name, String password, String code) {
registView.showLoadingView();
loginAndRegistMananger.regist(name, password, code, new LoginAndRegistMananger.OnRegistLisener() {
@Override
public void registSuccess(String user) {
registView.onShowSuccessRegistView(user);
registView.dissLoadingView();
}
@Override
public void registFailed() {
registView.onShowFailedRegistView();
registView.dissLoadingView();
}
});
}
/**
* 登录
* @param name
* @param password
*/
public void login(String name, String password) {
loginView.showLoadingView();
loginAndRegistMananger.login(name, password, new LoginAndRegistMananger.OnLoginListener() {
@Override
public void loginSuccess(User user) {
loginView.onShowSuccessLoginView(user);
loginView.dissLoadingView();
}
@Override
public void loginFailed() {
loginView.onShowFailedLoginView(0);
loginView.dissLoadingView();
}
});
}
}
最后就是使用了 在登陆界面
只需要实现loginview
然后调用 LoginAndRegistPresenter 实现登陆功能
/**
* Created by wushange on 2016/06/01.
*/
public class LoginActivity extends BaseSwipeBackActivity implements LoginView {
LoginAndRegistPresenter mloginPresenter = new LoginAndRegistPresenter(this);
@ViewInject(R.id.login_btn)
Button login;
@ViewInject(R.id.go_reg_btn)
Button go_reg_btn;
@ViewInject(R.id.apptitle)
AppTitle appTitle;
@Override
public int bindLayout() {
return R.layout.activity_login_main_view;
}
@Override
public void initView(View view) {
appTitle.init(AppTitle.AppTitleStyle.BACK_TITLE);
appTitle.setTitle("登陆");
appTitle.setBackClickClisener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}
@Override
public void doBusiness(Context mContext) {
}
@Event(R.id.login_btn)
private void setLogin(View v) {
LogUtil.e("---setLogin----");
mloginPresenter.login("111", "111");
}
@Event(R.id.go_reg_btn)
private void setGo_reg_btn(View v) {
AppUtils.startAct(getContext(), RegistActivity.class);
}
@Override
public void onShowSuccessLoginView(User user) {
LogUtil.e("---onShowSuccessLoginView----" + user.toString());
}
@Override
public void onShowFailedLoginView(int error) {
LogUtil.e("---onShowFailedLoginView----");
}
@Override
public void showLoadingView() {
LogUtil.e("---showLoginView----");
}
@Override
public void dissLoadingView() {
LogUtil.e("---dissLoginView----");
}
}
注册界面同理
/**
* Created by wushange on 2016/06/01.
*/
public class RegistActivity extends BaseSwipeBackActivity implements RegistView {
LoginAndRegistPresenter mloginPresenter = new LoginAndRegistPresenter(this);
@ViewInject(R.id.regist_btn)
Button regist;
@ViewInject(R.id.getcode_btn)
Button getcode_btn;
@ViewInject(R.id.apptitle)
AppTitle appTitle;
@Override
public int bindLayout() {
return R.layout.activity_regist_main_view;
}
@Override
public void initView(View view) {
appTitle.init(AppTitle.AppTitleStyle.BACK_TITLE);
appTitle.setTitle("注册");
appTitle.setBackClickClisener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}
@Override
public void doBusiness(Context mContext) {
}
@Event(R.id.regist_btn)
private void setRegist(View v) {
mloginPresenter.regist("111", "111", "1");
}
@Event(R.id.getcode_btn)
private void setGetcode_btn(View v) {
mloginPresenter.getCode("1564594066");
}
@Override
public void onShowSuccessRegistView(String user) {
LogUtil.e("--onShowSuccessRegistView---" + user);
}
@Override
public void onShowFailedRegistView() {
LogUtil.e("--onShowFailedRegistView---");
}
@Override
public void OnShowSuccessGetCodeView() {
LogUtil.e("--OnShowSuccessGetCodeView---");
}
@Override
public void OnshowFailGetCodeView() {
LogUtil.e("--OnshowFailGetCodeView---");
}
@Override
public void showLoadingView() {
LogUtil.e("--showLoadingView---");
}
@Override
public void dissLoadingView() {
LogUtil.e("--dissLoadingView---");
}
}
以上是我自己本人今天看了下mvp的设计模式 我所领悟的。 做个笔记,还希望大家多多指教
欢迎大家加入我的qq交流群 74406192