android开发入门登录,android 开发之初学MVP设计模式(模拟登录)

android 开发之初学MVP设计模式(模拟登录)

以模拟登录为例,学习MVP模式

一、新建工程,创建MVP目录结构

3c88f5237d94

Paste_Image.png

1、activity 主要放activity界面

2、Model M层 主要放基本实体类、接口和接口实现类

3、View V层 view与presenter交互的接口,让Activity实现

4、Presenter P层 Model与view的控制器,持有view和model的引用,从view中获取参数,交给model去处理,执行结果通过接口的方式通过presenter层传递给view层进行显示。

二、在veiw层中创建LoginView 接口,获取activity中需要的参数

3c88f5237d94

Paste_Image.png

在Activity中实现该接口,将参数暴露给loginview

3c88f5237d94

Paste_Image.png

三、在model层创建OnLoginListener接口 ,用来监听处理model实现后的操作;

3c88f5237d94

Paste_Image.png

在presenter层创建LoginPresenter类实现OnLoginListener接口,用来处理model的View

/**

* Created by zzj on 2017/1/6.

*/

public class LoginPresenter implements OnLoginListener {

@Override

public void onUsernameError() {

}

@Override

public void onPasswordError() {

}

@Override

public void onSuccess() {

}

@Override

public void onFailure() {

}

}

四、在model层创建登录接口(LoginPort),获取需要的参数

/**

* 登录接口

* Created by zzj on 2017/1/6.

*/

public interface LoginPort {

void login(String username,String password,OnLoginListener onLoginListener);

}

在model层中创建loginModelImple类实现LoginPort接口,此类主要是处理网络请求的操作。由于本次未使用到网络请求,简单实现本地模拟登录。

/** 处理网络请求的操作

* Created by zzj on 2017/1/6.

*/

public class LoginModelImple implements LoginPort {

@Override

public void login(String username, String password, OnLoginListener onLoginListener) {

if(username.equals("admin")&&password.equals("123456")){

onLoginListener.onSuccess();//登录成功

}else if(!username.equals("admian")||!password.equals("123456")){

onLoginListener.onUsernameError();//用户名或者密码错误

}else {

onLoginListener.onFailure();//登录失败

}

}

}

五、在LoginPresenter类中,声明实例化登录接口(LoginPort)和登录View(LoginView),将从view层获取的用户名和密码传送给model层,然后让activity中的登录按钮调用

/**

* Created by zzj on 2017/1/6.

*/

public class LoginPresenter implements OnLoginListener {

private LoginPort loginPort;//登录接口

private LoginView loginView;//登录veiw

//实例化登录接口和登录view

public LoginPresenter(LoginView loginView){

this.loginView = loginView;

loginPort = new LoginModelImple();

}

/**

* 将从view层中获取的用户名和密码传送给Model层

* 然后让activity中的登录按钮调用此方法

*/

public void login(){

String username = loginView.getUsername();

String password = loginView.getPassword();

loginPort.login(username,password,this);

}

@Override

public void onUsernameError() {

loginView.showToast("用户名或者密码错误");

}

@Override

public void onSuccess() {

loginView.showToast("登录成功!");

}

@Override

public void onFailure() {

loginView.showToast("异常错误!");

}

}

在loginAcitivy中实例化LoginPresenter类,调用login方法。

public class LoginActivity extends AppCompatActivity implements View.OnClickListener,LoginView {

private AppCompatEditText username ,password;

private AppCompatButton loginBt;

private LoginPresenter loginPresenter;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

initView();

loginPresenter = new LoginPresenter(this);

}

private void initView(){

username = (AppCompatEditText) findViewById(R.id.login_username);

password = (AppCompatEditText) findViewById(R.id.login_password);

loginBt = (AppCompatButton) findViewById(R.id.login_loginbt);

loginBt.setOnClickListener(this);

}

/**

* 向view层暴露参数

* @return 用户名

*/

public String getUsername(){

return username.getText().toString().trim();

}

public String getPassword(){

return password.getText().toString().trim();

}

@Override

public void showToast(String msg) {

Toast.makeText(this,msg,Toast.LENGTH_SHORT).show();

}

@Override

public void onClick(View v) {

loginPresenter.login();

}

}

效果展示:

3c88f5237d94

Screenshot_1483695444.png

3c88f5237d94

Screenshot_1483695452.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值