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地址: