栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

android mvvm的理解(android mvp和mvc区别)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

android mvvm的理解(android mvp和mvc区别)

//set or get …

public User(String name, String password) {

this.name = name;

this.password = password;

}

}

3.MVCLoginActivity

//用户点击事件

mvcBinding.mcvLogin.btnLogin.setonClickListener(new View.onClickListener() {

@Override

public void onClick(View v) {

user.setName(mvcBinding.mcvLogin.etAccount.getText().toString());

user.setPassword(mvcBinding.mcvLogin.etPassword.getText().toString());

login(user);

}

});

//逻辑处理

private void login(User user){

if(!user.getName().isEmpty()&&!user.getPassword().isEmpty()){

if(user.getName().equals(“scc001”)&&user.getPassword().equals(“111111”))

{

Toast.makeText(this,“登录成功”,Toast.LENGTH_SHORT).show();

}else{

Toast.makeText(this,“登录失败”,Toast.LENGTH_SHORT).show();

}

}else {

Toast.makeText(this,“登录失败”,Toast.LENGTH_SHORT).show();

}

}

MVP实例


代码结构

1.Model层

实体类bean,同MVC中的User类,就不贴代码浪费大家时间了。

Model层所要执行的业务逻辑

public interface LoginModel {

//User实体类;OnLoginFinishedListener presenter业务逻辑的返回结果

void login(User user, OnLoginFinishedList

ener listener);

}

实现类(实现LoginModel接口)

public class LoginModelImpl implements LoginModel {

//第4步:验证帐号密码

@Override

public void login(User user, OnLoginFinishedListener listener) {

if(user.getName().isEmpty()||!user.getName().equals(“scc001”)){

//第5步:Model层里面回调Presenter层listener

listener.onUserNameError();

}else if(user.getPassword().isEmpty()||!user.getPassword().equals(“111111”)){

//第5步:Model层里面回调Presenter层listener

listener.onPasswordError();

}else {

//第5步:Model层里面回调Presenter层listener

listener.onSuccess();

}

}

}

2.Presenter层

当Model层得到请求的结果,回调Presenter层,让Presenter层调用View层的接口方法。

public interface OnLoginFinishedListener {

void onUserNameError();

void onPasswordError();

void onSuccess();

}

完成登录的验证,以及销毁当前View。

public interface LoginPresenter {

//完成登录的验证

void verifyData(User user);

//销毁当前View

void onDestroy();

}

Presenter实现类,引入 LoginModel(model)和LoginView(view)的引用

public class LoginPresenterImpl implements OnLoginFinishedListener, LoginPresenter {

//View层接口

private LoginView loginView;

//Model层接口

private LoginModel loginModel;

public LoginPresenterImpl(LoginView loginView) {

this.loginView = loginView;

this.loginModel = new LoginModelImpl();

}

//第6步:通过OnLoginFinishedListener验证结果回传到Presenter层

@Override

public void onUserNameError() {

if (loginView != null) {

//第7步:通过loginView回传到View层

loginView.setUserNameError();

loginView.hideProgress();

}

}

//第6步:通过OnLoginFinishedListener验证结果回传到Presenter层

@Override

public void onPasswordError() {

if (loginView != null) {

//第7步:通过loginView回传到View层

loginView.setPasswordError();

loginView.hideProgress();

}

}

//第6步:通过OnLoginFinishedListener验证结果回传到Presenter层

@Override

public void onSuccess() {

if (loginView != null) {

//第7步:通过loginView回传到View层

loginView.success();

loginView.hideProgress();

}

}

@Override

public void verifyData(User user) {

if (loginView != null) {

loginView.showProgress();

}

//第3步:调用model层LoginModel接口的login()方法

loginModel.login(user,this);

}

@Override

public void onDestroy() {

loginView = null;

}

}

3.View层

布局文件同MVC中的View层,就不贴代码浪费大家时间了。

Presenter与View交互是通过接口。

public interface LoginView {

//login是个耗时操作,加载中(一般用ProgressBar)

void showProgress();

//加载完成

void hideProgress();

//login账号失败给出提示

void setUserNameError();

//login密码失败给出提示

void setPasswordError();

//login成功

void success();

}

MVPLoginActivity

public class MVPLoginActivity extends AppCompatActivity implements LoginView {

LoginPresenterImpl loginPresenterImpl;

@Override

protected void onCreate(@Nullable Bundle savedInstanceState) {

//创建一个Presenter对象

loginPresenterImpl = new LoginPresenterImpl(MVPLoginActivity.this);

//第1步:用户点击登录

mvpBinding.mvpLogin.btnLogin.setonClickListener(new View.onClickListener() {

@Override

public void onClick(View v) {

User user = new User();

user.setName(mvpBinding.mvpLogin.etAccount.getText().toString());

user.setPassword(mvpBinding.mvpLogin.etPassword.getText().toString());

//第2步:调用Presenter接口中的验证方法

loginPresenterImpl.verifyData(user);

}

});

}

@Override

public void showProgress() {

//加载中

}

@Override

public void hideProgress() {

//加载完成

}

@Override

public void setUserNameError() {

//第7步:通过loginView回传到View层

//账号错误

Toast.makeText(this,“登录失败”,Toast.LENGTH_SHORT).show();

}

@Override

public void setPasswordError() {

//第7步:通过loginView回传到View层

//密码错误

Toast.makeText(this,“登录失败”,Toast.LENGTH_SHORT).show();

}

@Override

public void success() {

//第7步:通过loginView回传到View层

Toast.makeText(this,“登录成功”,Toast.LENGTH_SHORT).show();

//登录成功

}

@Override

protected void onDestroy() {

super.onDestroy();

loginPresenterImpl.onDestroy();

}

}

MVVM实例


1.Model层

实体类bean,继承baseObservable

public class User extends baseObservable{

private String name;

private String password;

public User() {

}

//BR 的域则是通过在 get 方法上加 @Bindable 生成的

@Bindable

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

//刷新UI

//BR 的域则是通过在 get 方法上加 @Bindable 生成的

notifyPropertyChanged(BR.name);

}

@Bindable

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

//刷新UI

notifyPropertyChanged(BR.password);

}

public User(String name, String password) {

this.name = name;

this.password = password;

最后

希望本文对你有所启发,有任何面试上的建议也欢迎留言分享给大家。

好了,今天的分享就到这里,如果你对在面试中遇到的问题,或者刚毕业及工作几年迷茫不知道该如何准备面试并突破现状提升自己,对于自己的未来还不够了解不知道给如何规划,来看看同行们都是如何突破现状,怎么学习的,来吸收他们的面试以及工作经验完善自己的之后的面试计划及职业规划。

好了~如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。

为什么某些人会一直比你优秀,是因为他本身就很优秀还一直在持续努力变得更优秀,而你是不是还在满足于现状内心在窃喜!希望读到这的您能点个小赞和关注下我,以后还会更新技术干货,谢谢您的支持!
assword(String password) {

this.password = password;

//刷新UI

notifyPropertyChanged(BR.password);

}

public User(String name, String password) {

this.name = name;

this.password = password;

最后

希望本文对你有所启发,有任何面试上的建议也欢迎留言分享给大家。

好了,今天的分享就到这里,如果你对在面试中遇到的问题,或者刚毕业及工作几年迷茫不知道该如何准备面试并突破现状提升自己,对于自己的未来还不够了解不知道给如何规划,来看看同行们都是如何突破现状,怎么学习的,来吸收他们的面试以及工作经验完善自己的之后的面试计划及职业规划。

[外链图片转存中…(img-7o3b6zdT-1647754367151)]

好了~如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。

[外链图片转存中…(img-9sRSZSkk-1647754367151)]

为什么某些人会一直比你优秀,是因为他本身就很优秀还一直在持续努力变得更优秀,而你是不是还在满足于现状内心在窃喜!希望读到这的您能点个小赞和关注下我,以后还会更新技术干货,谢谢您的支持!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/776315.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号