效果
布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:orientation="vertical"
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"
tools:context="com.example.mvc_denglu.MainActivity">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="用户名"/>
<EditText
android:layout_width="300dp"
android:layout_height="wrap_content"
android:id="@+id/username"/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="密码"/>
<EditText
android:layout_width="300dp"
android:layout_height="wrap_content"
android:id="@+id/password"/>
</LinearLayout>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="登陆"
android:id="@+id/login"/>
</LinearLayout>
model层
数据类
package com.example.mvc_denglu.model;
public class User {
public String username;
public String password;
}
方法
package com.example.mvc_denglu.model;
import android.os.SystemClock;
/**
* date:2018/5/17
* author:易宸锋(dell)
* function:
*/
public class UserLoginNet {
/**
* 对用户输入信息是否正确进行判断
*/
public boolean sendUserLoginInfo(User user){
//模拟耗时操作
SystemClock.sleep(2000);
//对用户输入的信息进行判断
if ("ycf".equals(user.username) && "ycf".equals(user.password)) {
//登录成功
return true;
}else {
//登录失败
return false;
}
}
}
vc层主页面
package com.example.mvc_denglu;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.SystemClock;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.example.mvc_denglu.R;
import com.example.mvc_denglu.model.User;
import com.example.mvc_denglu.model.UserLoginNet;
/**
* MVP实际上就是MVC的升级版,严格的将Android视图层代码和逻辑层代码拆分出来,一个功能可以拆分出数个类,
* 更加模块功能拆分抽象类,使用Bean类进行数据的传递
*
* 1.阅读要拆分的代码,把Activity或Fragment代码看出两部分,一部分业务逻辑,一部分视图
* 2.讲Activity中业务逻辑的代码,拆分到Presenter包下UserLoginPresenter中
* 3.定义接口,是Activity与UserLoginPresenter耦合性降低
*/
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
//View
private EditText mUsername;
private EditText mPassword;
private Button login;
private ProgressDialog mProgressDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
//V
mUsername = (EditText) findViewById(R.id.username);
mPassword = (EditText) findViewById(R.id.password);
login = (Button) findViewById(R.id.login);
login.setOnClickListener(this);
//动态的创建一个进度条
mProgressDialog = new ProgressDialog(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.login:
//获取用户输入的信息 V层
final String username = mUsername.getText().toString().trim();
final String password = mPassword.getText().toString().trim();
//创建Bean类,把数据放到Bean类里 M
final User user = new User();
user.username = username;
user.password = password;
//判断信息是否为null 业务相关 C
boolean userInfo = submit(user);
if (userInfo) {
//显示进度条对话框 V 层
mProgressDialog.show();
//开个子线程做耗时操作 C
new Thread() {
public void run() {
//模拟请求网络,睡一会在进行操作,
SystemClock.sleep(2000);
//关闭进度条 V
mProgressDialog.dismiss();
//创建网络工具类对象
UserLoginNet net = new UserLoginNet();
//对用户输入的信息进行判断
if (net.sendUserLoginInfo(user)) {
//更新UI V
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this, "欢迎回来,思密达!!", Toast.LENGTH_SHORT).show();
}
});
} else {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this, "您的信息有误,请重新填写!!", Toast.LENGTH_SHORT).show();
}
});
}
}
;
}.start();
} else {
Toast.makeText(this, "输入不能为null,么么哒!!!", Toast.LENGTH_SHORT).show();
}
break;
}
}
private boolean submit(User user) {
if (TextUtils.isEmpty(user.username) || TextUtils.isEmpty(user.password)) {
Toast.makeText(this, "输入不能为空", Toast.LENGTH_SHORT).show();
return false;
}
return true;
}
}