Android 设计模式之MVC模式

MVC的介绍

MVC是Model-View-Controller的简称

Model:模型层,负责处理数据的加载或者存储

View:视图层,负责界面数据的展示,与用户进行交互

Controller:控制器层,负责逻辑业务的处理

下面以登录写个简单的demo。

整体的项目架构。

1.xml布局。

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:app="http://schemas.android.com/apk/res-auto"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

tools:context="com.example.zb.mymvcdemo.MainActivity">

<Button

android:id="@+id/bt_on"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="登录"

app:layout_constraintBottom_toBottomOf="parent"

app:layout_constraintLeft_toLeftOf="parent"

app:layout_constraintRight_toRightOf="parent"

app:layout_constraintTop_toTopOf="parent" />

<TextView

android:id="@+id/tv_content"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="内容"

/>

</LinearLayout>

2.数据操作回调接口,model和view之间的联系。

public interface LoginListener {

void onBefore();

void onSuccess(String str);

void onFailed();

}

3.Controller和model之间的联系。

public interface LoginModel {

/**

* (获取登录数据)

* Created by zb on 2019/4/25.

*/

void login(String admin, String pas,String url, LoginListener loginListener);

}

4.逻辑处理LoginModelImp进行网络请求

/**用户操作具体实现类

* Created by zb on 2019/4/25.

*/

public class LoginModelImp implements LoginModel{

@Override

public void login(String admin, String pas, String url, final LoginListener loginListener) {

if (loginListener == null) return;

loginListener.onBefore();

HashMap<String, String> param=new HashMap<>();

param.put("code",admin);

param.put("password",pas);

HttpUtils.doPost(url, param, new Callback() {

@Override

public void onFailure(Call call, IOException e) {

loginListener.onFailed();

}

@Override

public void onResponse(Call call, Response response) throws IOException {

loginListener.onSuccess(response.body().string());

}

});

}

}

请求成功我们就通过LoginListener 告诉view可以开始展示了。

5.MainActivity

public class MainActivity extends AppCompatActivity implements LoginListener{

@BindView(R.id.bt_on)

Button mBtOn;

@BindView(R.id.tv_content)

TextView mTvContent;

LoginModelImp loginModelImp;

@Override

protected void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

ButterKnife.bind(this);

}

@OnClick(R.id.bt_on)

public void onViewClicked() {

if (loginModelImp == null) {

loginModelImp = new LoginModelImp();

}

String url="http://192.168.200.211:8081/GetUserInfo";

loginModelImp.login("admin","123456",url,MainActivity.this);

}

private ProgressDialog dialog;

@Override

public void onBefore() {

if (dialog == null) {

dialog = new ProgressDialog(this);

}

dialog.show();

}

@Override

public void onSuccess(final String str) {

this.runOnUiThread(new Runnable() {

@Override

public void run() {

mTvContent.setText(str);

dialog.dismiss();

}

});

}

@Override

public void onFailed() {

dialog.dismiss();

}

}

以上大功告成。

github地址:

https://github.com/b888zhang/MyMVCDemo

猜你喜欢

转载自blog.csdn.net/lumingzhang/article/details/89531545
今日推荐