android mvp 登录,Android开发中的MVP模式模拟登录实践
时间: 2024-03-16 08:47:27 浏览: 15
好的,下面是一个简单的Android MVP架构模式实现的登录功能的示例代码:
1. 首先定义一个登录的接口 LoginContract,其中包括视图层、控制层和数据层的接口:
```
public interface LoginContract {
interface View {
void onLoginSuccess();
void onLoginFailure(String errorMessage);
}
interface Presenter {
void login(String username, String password);
}
interface Model {
void login(String username, String password, OnLoginFinishedListener listener);
}
interface OnLoginFinishedListener {
void onLoginSuccess();
void onLoginFailure(String errorMessage);
}
}
```
2. 在视图层,实现LoginContract.View接口,并创建Presenter对象:
```
public class LoginActivity extends AppCompatActivity implements LoginContract.View {
private EditText mUsernameEditText;
private EditText mPasswordEditText;
private Button mLoginButton;
private ProgressBar mProgressBar;
private LoginContract.Presenter mPresenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
mUsernameEditText = findViewById(R.id.username_edit_text);
mPasswordEditText = findViewById(R.id.password_edit_text);
mLoginButton = findViewById(R.id.login_button);
mProgressBar = findViewById(R.id.progress_bar);
mPresenter = new LoginPresenter(this);
mLoginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String username = mUsernameEditText.getText().toString();
String password = mPasswordEditText.getText().toString();
mPresenter.login(username, password);
}
});
}
@Override
public void onLoginSuccess() {
// 登录成功
mProgressBar.setVisibility(View.GONE);
Toast.makeText(this, "登录成功", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
finish();
}
@Override
public void onLoginFailure(String errorMessage) {
// 登录失败
mProgressBar.setVisibility(View.GONE);
Toast.makeText(this, errorMessage, Toast.LENGTH_SHORT).show();
}
}
```
3. 在控制层,实现LoginContract.Presenter接口,并通过构造函数将视图层和数据层传递进来:
```
public class LoginPresenter implements LoginContract.Presenter, LoginContract.OnLoginFinishedListener {
private LoginContract.View mView;
private LoginContract.Model mModel;
public LoginPresenter(LoginContract.View view) {
mView = view;
mModel = new LoginModel();
}
@Override
public void login(String username, String password) {
mView.showProgressBar();
mModel.login(username, password, this);
}
@Override
public void onLoginSuccess() {
mView.hideProgressBar();
mView.onLoginSuccess();
}
@Override
public void onLoginFailure(String errorMessage) {
mView.hideProgressBar();
mView.onLoginFailure(errorMessage);
}
}
```
4. 在数据层,实现LoginContract.Model接口,并在登录完成后将结果回调给Presenter:
```
public class LoginModel implements LoginContract.Model {
@Override
public void login(final String username, final String password, final LoginContract.OnLoginFinishedListener listener) {
// 模拟登录过程,这里使用Handler模拟异步请求
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if (username.equals("admin") && password.equals("123456")) {
listener.onLoginSuccess();
} else {
listener.onLoginFailure("用户名或密码错误");
}
}
}, 2000);
}
}
```
这就是一个简单的Android MVP架构模式实现的登录功能的示例代码,通过这种架构模式,可以将代码分层,实现逻辑清晰,易于维护和测试。