介绍
1. MVC架构分工
- Model层:处理数据验证、网络请求等业务逻辑。
- View层:XML布局定义界面,Activity处理用户输入和显示结果。
- Controller层:Activity作为控制器,协调Model和View的交互
对于登录模块的实现,我需要详细解释每个组件的职责和实现方式:
Model层主要负责处理数据和业务逻辑,包括用户信息的数据模型和登录验证逻辑。
View层由XML布局文件和Activity的一部分组成,负责展示登录界面和处理用户输入。
Controller层通常是Activity或Fragment,负责协调View和Model之间的交互
2. 项目结构与包组织

3. 详细代码实现
3.1 Model层
处理用户数据和认证逻辑,独立于界面。
User.java(数据模型)
package com.example.login.model;
public class User {
private String username;
private String password;
// Getter & Setter
public String getUsername() { return username; }
public void setUsername(String username) { this.username = username; }
public String getPassword() { return password; }
public void setPassword(String password) { this.password = password; }
}
Authentication.java(认证逻辑)
package com.example.login.model;
public class Authentication {
// 模拟用户验证(实际开发中替换为网络请求)
public boolean authenticate(String username, String password) {
// 示例:用户名为"admin"且密码为"123456"时通过
return "admin".equals(username) && "123456".equals(password);
}
}
3.2 View层
XML布局定义登录界面元素,Activity初始化控件。
activity_login.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">
<EditText
android:id="@+id/et_username"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="用户名"/>
<EditText
android:id="@+id/et_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="密码"
android:inputType="textPassword"/>
<Button
android:id="@+id/btn_login"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="登录"/>
<TextView
android:id="@+id/tv_result"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
3.3 Controller层 (LoginActivity.java)
协调用户输入、调用Model、更新View。
package com.example.login.controller;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import com.example.login.model.Authentication;
public class LoginActivity extends AppCompatActivity {
private EditText etUsername, etPassword;
private TextView tvResult;
private Button btnLogin;
private Authentication authModel; // Model层引用
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
// 初始化View组件
etUsername = findViewById(R.id.et_username);
etPassword = findViewById(R.id.et_password);
btnLogin = findViewById(R.id.btn_login);
tvResult = findViewById(R.id.tv_result);
// 初始化Model
authModel = new Authentication();
// 登录按钮点击事件
btnLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 1. 获取用户输入
String username = etUsername.getText().toString().trim();
String password = etPassword.getText().toString().trim();
// 2. 调用Model层验证
boolean isSuccess = authModel.authenticate(username, password);
// 3. 更新View层显示结果
if (isSuccess) {
tvResult.setText("登录成功!");
tvResult.setTextColor(getResources().getColor(android.R.color.holo_green_dark));
} else {
tvResult.setText("用户名或密码错误");
tvResult.setTextColor(getResources().getColor(android.R.color.holo_red_dark));
}
}
});
}
}
Controller层处理流程:
- 监听事件:按钮点击触发登录流程。
- 获取数据:从输入框提取用户名和密码。
- 调用Model:将数据交给
Authentication验证。 - 更新View:根据验证结果显示成功/失败消息。
4. MVC在Android中的局限性
- Activity臃肿:Controller和View逻辑易混杂,导致代码量大(如网络请求放在Activity中会阻塞UI)。
- View与Model未完全解耦:Activity直接操作Model,若需更换数据源(如从本地数据库改为API),需修改Controller代码。
956

被折叠的 条评论
为什么被折叠?



