示例效果

一共三个控件,EditText,Button,TextView

成功显示账号信息,查询失败显示错误信息。

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:background="@color/pureWhite"> <Button
android:id="@+id/btnQuery"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="64dp"
android:text="获取账号信息"
android:textColor="@color/pureWhite"
android:textSize="20dp"
android:onClick="ButtonClick"
android:theme="@style/GenericButtonStyle"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/etAccount" /> <EditText
android:id="@+id/etAccount"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="84dp"
android:ems="10"
android:hint="输入账号"
android:inputType="textPersonName"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="Name" /> <TextView
android:id="@+id/tvResult"
android:layout_width="0dp"
android:layout_height="30dp"
android:layout_marginTop="40dp"
tools:text="查询结果"
android:textSize="20sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/btnQuery" /> </androidx.constraintlayout.widget.ConstraintLayout>

主界面代码

控件关键信息

注意:为了简化,这里查询数据库用的是模拟操作,随机成功或者失败。

不使用任何框架的传统做法

新建用户信息类Account和回调接口

public class Account {
private String name;
private int level;
public interface ResultCallback {
void onSuccess(Account account); void onFailure();
}

Activity中的代码

public class HelloActivity extends AppCompatActivity {
private TextView tvResult;
private EditText etAccount;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test);
tvResult = findViewById(R.id.tvResult);
etAccount = findViewById(R.id.etAccount);
} public void ButtonClick(View view) {
String userInput=getUserInput();
getAccountData(userInput, new ResultCallback() {
@Override
public void onSuccess(Account account) {
showSuccessPage(account);
} @Override
public void onFailure() {
showFailurePage();
}
});
} private String getUserInput() {
return etAccount.getText().toString();
} private void showSuccessPage(Account account) {
tvResult.setText("用户账号:"+account.getName()+"|"+
"用户等级:"+account.getLevel());
}
private void showFailurePage() {
tvResult.setText("获取数据失败");
} private void getAccountData(String accountName, ResultCallback cb) {
Random random=new Random();
boolean isSuccess=random.nextBoolean();
if (isSuccess) {
Account account = new Account();
account.setName(accountName);
account.setLevel(100);
cb.onSuccess(account);
} else {
cb.onFailure();
}
} }

MVC

Account和ResultCallback同上

MVCModel代码

public class MVCModel {
public void getAccountData(String accountName, ResultCallback cb) {
Random random=new Random();
boolean isSuccess=random.nextBoolean();
if (isSuccess) {
Account account = new Account();
account.setName(accountName);
account.setLevel(100);
cb.onSuccess(account);
} else {
cb.onFailure();
}
}
}

MVCActivity代码

public class MVCActivity extends AppCompatActivity {
private TextView tvResult;
private EditText etAccount;
private MVCModel model;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test);
tvResult = findViewById(R.id.tvResult);
etAccount = findViewById(R.id.etAccount);
model=new MVCModel();
} public void ButtonClick(View view) {
String userInput=getUserInput();
model.getAccountData(userInput, new ResultCallback() {
@Override
public void onSuccess(Account account) {
showSuccessPage(account);
} @Override
public void onFailure() {
showFailurePage();
}
});
} private String getUserInput() {
return etAccount.getText().toString();
} private void showSuccessPage(Account account) {
tvResult.setText("用户账号:"+account.getName()+"|"+
"用户等级:"+account.getLevel());
}
private void showFailurePage() {
tvResult.setText("获取数据失败");
}
}

 MVC模式缺点

Controller View不能完全解耦。

Activity过于臃肿,需要承担部分业务代码。

最新文章

  1. SQL Server自动化运维系列——监控性能指标脚本(Power Shell)
  2. 使用PackageManager获得应用(包)信息
  3. yii2-basic后台管理功能开发之二:创建CRUD增删改查
  4. Bootstrap系列 -- 21. 表单提示信息
  5. 蓝桥杯 算法训练 区间k大数查询(水题)
  6. JAVA多线程的问题以及处理【转】
  7. Delphi TFindDialog TReplaceDialog对话框在Memo中的使用
  8. [poj 3678]Katu Pazzle[2-SAT常用建图法]
  9. 办理西蒙菲莎大学(本科)学历认证『微信171922772』SFU学位证成绩单使馆认证Simon Fraser University
  10. 用ESP8266+android,制作自己的WIFI小车
  11. 在Android Studio 上安装Genymotion插件
  12. git学习03 - 撤销修改&amp;删除文件
  13. iOS 加锁的方式
  14. 数据库的OLE字段写入长二进制文件
  15. linux下i2c的驱动架构分析和应用
  16. LeetCode 6罗马数字转整数
  17. 【Visual Studio】Visual Studio中常用的快捷键收集
  18. Java如何使用重载方法处理异常?
  19. [转载]安装archlinux 以后没有 ifconfig,route ,nslo
  20. Python图形界面Tk

热门文章

  1. Linux查找文件内容小技巧
  2. SQL基础练习03---牛客网
  3. php+文件分块上传
  4. HDU 5863 cjj&#39;s string game ( 16年多校10 G 题、矩阵快速幂优化线性递推DP )
  5. 配置魔药(DP)
  6. 5.13T1Send 题(send)
  7. 掌握 3 个搜索技巧,在 GitHub 上快速找到实用软件资源
  8. ARTS打卡计划第十四周
  9. Reflexil
  10. webpack publicpath path