一共三個控件,EditText,Button,TextViewandroid
成功顯示帳號信息,查詢失敗顯示錯誤信息。數據庫
<?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>
控件關鍵信息app
注意:爲了簡化,這裏查詢數據庫用的是模擬操做,隨機成功或者失敗。框架
新建用戶信息類Account和回調接口dom
public class Account { private String name; private int level;
public interface ResultCallback { void onSuccess(Account account); void onFailure(); }
Activity中的代碼ide
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(); } } }
Account和ResultCallback同上spa
MVCModel代碼3d
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代碼code
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模式缺點
xml
Controller View不能徹底解耦。
Activity過於臃腫,須要承擔部分業務代碼。