Android-设计模式
代码架构 MVC
model:UserLoginModel.java
package com.gordon.androidmvcmvp.mvc.mode;import android.text.TextUtils;
import com.google.gson.Gson;
import com.gordon.androidmvcmvp.mvc.bean.UserLoginBean;
import com.zhy.http.okhttp.OkHttpUtils;
import com.zhy.http.okhttp.callback.StringCallback;public class UserLoginModel {public void login(String username, String password, final OnNetResponseListener listener) {//本地对输入情况做校验,都不为空的时候才请求服务器boolean validateOk = validateInput(username, password);if (validateOk) {String url = "http://www.loghare.com/Shop/customer/customer_userLogin.html";OkHttpUtils.post().url(url).addParams("uname", username).addParams("pwd", password).build().execute(new StringCallback() {@Overridepublic void onError(okhttp3.Call call, Exception e, int id) {listener.onNetResponseError(e.getMessage());}@Overridepublic void onResponse(String response, int id) {Gson gson = new Gson();UserLoginBean userLoginBean = gson.fromJson(response, UserLoginBean.class);listener.onNetResponseOk(userLoginBean);}});} else {listener.onNetResponseError("invisi");}}//校验输入是否为空private boolean validateInput(String username, String password) {if (!TextUtils.isEmpty(username) && !TextUtils.isEmpty(password)) {return true;} else {return false;}}public interface OnNetResponseListener {void onNetResponseOk(UserLoginBean userLoginBean);void onNetResponseError(String msg);}
}
view-controller LoginActivityMvc.java
package com.gordon.androidmvcmvp.mvc;import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.telecom.Call;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.Toast;import com.google.gson.Gson;
import com.gordon.androidmvcmvp.LoginActivity;
import com.gordon.androidmvcmvp.R;
import com.gordon.androidmvcmvp.UserDetailActivity;
import com.gordon.androidmvcmvp.mvc.bean.UserLoginBean;
import com.gordon.androidmvcmvp.mvc.mode.UserLoginModel;
import com.zhy.http.okhttp.OkHttpUtils;
import com.zhy.http.okhttp.callback.StringCallback;/*** Activity是万能的* 1、控件相关的代码 视图层相关的代码* 2、业务逻辑相关的代码* 3、数据相关的代码* *
* M:Model 模型层,产生数据* V:View 视图层* C:Controller 逻辑控制层*/
public class LoginActivityMvc extends AppCompatActivity implements View.OnClickListener {private EditText etUsername;private EditText etPassword;private Button btnLogin;private ProgressBar progressBar;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_login);etUsername = (EditText) findViewById(R.id.etUsername);etPassword = (EditText) findViewById(R.id.etPassword);btnLogin = (Button) findViewById(R.id.btnLogin);progressBar = (ProgressBar) findViewById(R.id.progressBar);btnLogin.setOnClickListener(this);}@Overridepublic void onClick(View v) {int id = v.getId();switch (id) {case R.id.btnLogin:String username = etUsername.getText().toString();String password = etPassword.getText().toString();login(username, password);break;}}private void login(String username, String password) {progressBar.setVisibility(View.VISIBLE);UserLoginModel userLoginModel = new UserLoginModel();userLoginModel.login(username, password, new UserLoginModel.OnNetResponseListener() {@Overridepublic void onNetResponseOk(UserLoginBean userLoginBean) {//ui显示progressBar.setVisibility(View.GONE);if (userLoginBean.getStatus() == 200) {//登录成功,跳转界面Toast.makeText(LoginActivityMvc.this, "欢迎回来:" + userLoginBean.getUser().getUsername(), Toast.LENGTH_SHORT).show();Intent intent = new Intent();intent.putExtra("username", userLoginBean.getUser().getUsername());intent.putExtra("uId", userLoginBean.getUser().getId() + "");intent.setClass(LoginActivityMvc.this, UserDetailActivity.class);startActivity(intent);finish();} else {Toast.makeText(LoginActivityMvc.this, userLoginBean.getMessage(), Toast.LENGTH_SHORT).show();}}@Overridepublic void onNetResponseError(String msg) {progressBar.setVisibility(View.GONE);Toast.makeText(LoginActivityMvc.this, "数据请求出错,请稍候尝试...", Toast.LENGTH_SHORT).show();}});}
}
bean UserLoginBean.java
package com.gordon.androidmvcmvp.mvp.bean;
public class UserLoginBean {* message : 登陆成功!* status : 200* user : {"address":null,"collectionCount":5,"email":"zhengping","id":1392,"loginTime":1479737556434,"memberLevel":0,"mobile":null,"orderCount":0,"password":"","realname":null,"userScore":0,"username":"zhengping"}*
private String message;
private int status;
private UserBean user;public String getMessage() {return message;
}public void setMessage(String message) {this.message = message;
}public int getStatus() {return status;
}public void setStatus(int status) {this.status = status;
}public UserBean getUser() {return user;
}public void setUser(UserBean user) {this.user = user;
}public static class UserBean {/*** address : null* collectionCount : 5* id : 1392* loginTime : 1479737556434* memberLevel : 0* mobile : null* orderCount : 0* password :* realname : null* userScore : 0* username : ppp*/private Object address;private int collectionCount;private String email;private int id;private long loginTime;private int memberLevel;private Object mobile;private int orderCount;private String password;private Object realname;private int userScore;private String username;public Object getAddress() {return address;}public void setAddress(Object address) {this.address = address;}public int getCollectionCount() {return collectionCount;}public void setCollectionCount(int collectionCount) {this.collectionCount = collectionCount;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public int getId() {return id;}public void setId(int id) {this.id = id;}public long getLoginTime() {return loginTime;}public void setLoginTime(long loginTime) {this.loginTime = loginTime;}public int getMemberLevel() {return memberLevel;}public void setMemberLevel(int memberLevel) {this.memberLevel = memberLevel;}public Object getMobile() {return mobile;}public void setMobile(Object mobile) {this.mobile = mobile;}public int getOrderCount() {return orderCount;}public void setOrderCount(int orderCount) {this.orderCount = orderCount;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public Object getRealname() {return realname;}public void setRealname(Object realname) {this.realname = realname;}public int getUserScore() {return userScore;}public void setUserScore(int userScore) {this.userScore = userScore;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}
}
代码架构 MVP
数据封装如上:UserLoginBean.java
presenter 层:
业务逻辑,UserLoginPresenter.java
package com.gordon.androidmvcmvp.mvp.presenter;
import android.text.TextUtils;
import com.gordon.androidmvcmvp.mvp.bean.UserLoginBean;
import com.gordon.androidmvcmvp.mvp.LoginActivityMvp;
import com.gordon.androidmvcmvp.mvp.model.UserLoginModel;
/**
-
author : gordon
-
e-mail : gordon_sun07@163.com
-
date : 2020/3/1 22:08
-
version: 1.0
-
desc : 登录模块的业务逻辑
*/
public class UserLoginPresenter {private LoginActivityMvp loginActivityMvp;
public UserLoginPresenter(LoginActivityMvp loginActivityMvp) {
this.loginActivityMvp = loginActivityMvp;
}public void login(String username, String password) {
//本地对输入情况做校验,都不为空的时候才请求服务器
boolean validateOk = validateInput(username, password);
if (validateOk) {
loginActivityMvp.showLoading();
UserLoginModel userLoginModel = new UserLoginModel();
userLoginModel.login(username, password, new UserLoginModel.OnNetResponseListener() {
@Override
public void onNetResponseOk(UserLoginBean userLoginBean) {
loginActivityMvp.hideLoading();
if (userLoginBean.getStatus() == 200) {
loginActivityMvp.onLoginOk(userLoginBean);
} else {
loginActivityMvp.onLoginError();
}
}@Overridepublic void onNetResponseError(String msg) {loginActivityMvp.hideLoading();loginActivityMvp.onInputError();}});} else {loginActivityMvp.onInputError();}}
//校验输入是否为空
private boolean validateInput(String username, String password) {
if (!TextUtils.isEmpty(username) && !TextUtils.isEmpty(password)) {
return true;
} else {
return false;
}
}
}
model 层:
数据处理:UserLoginModel.java
package com.gordon.androidmvcmvp.mvp.model;
import android.text.TextUtils;
import com.google.gson.Gson;
import com.gordon.androidmvcmvp.mvp.bean.UserLoginBean;
import com.zhy.http.okhttp.OkHttpUtils;
import com.zhy.http.okhttp.callback.StringCallback;
/**
-
author : gordon
-
e-mail : gordon_sun07@163.com
-
date : 2020/3/1 18:36
-
version: 1.0
-
desc : 只用来产生数据
*/
public class UserLoginModel {public void login(String username, String password, final OnNetResponseListener listener) {
//本地对输入情况做校验,都不为空的时候才请求服务器
boolean validateOk = validateInput(username, password);
if (validateOk) {
String url = “http://www.loghare.com/Shop/customer/customer_userLogin.html”;
OkHttpUtils
.post()
.url(url)
.addParams(“uname”, username)
.addParams(“pwd”, password)
.build()
.execute(new StringCallback() {
@Override
public void onError(okhttp3.Call call, Exception e, int id) {
listener.onNetResponseError(e.getMessage());
}@Overridepublic void onResponse(String response, int id) {Gson gson = new Gson();UserLoginBean userLoginBean = gson.fromJson(response, UserLoginBean.class);listener.onNetResponseOk(userLoginBean);}});} else {listener.onNetResponseError("invisi");}}
//校验输入是否为空
private boolean validateInput(String username, String password) {
if (!TextUtils.isEmpty(username) && !TextUtils.isEmpty(password)) {
return true;
} else {
return false;
}
}public interface OnNetResponseListener {
void onNetResponseOk(UserLoginBean userLoginBean);
void onNetResponseError(String msg);
}
}
view 层:UI更新
package com.gordon.androidmvcmvp.mvp;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.Toast;
import com.gordon.androidmvcmvp.R;
import com.gordon.androidmvcmvp.UserDetailActivity;
import com.gordon.androidmvcmvp.mvp.bean.UserLoginBean;
import com.gordon.androidmvcmvp.mvp.model.UserLoginModel;
import com.gordon.androidmvcmvp.mvp.presenter.UserLoginPresenter;
/**
-
M:Model 模型层,产生数据
-
V:View 视图层
-
P:Controller 逻辑控制层
*/
public class LoginActivityMvp extends AppCompatActivity implements View.OnClickListener {private EditText etUsername;
private EditText etPassword;
private Button btnLogin;
private ProgressBar progressBar;@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);etUsername = (EditText) findViewById(R.id.etUsername);etPassword = (EditText) findViewById(R.id.etPassword);btnLogin = (Button) findViewById(R.id.btnLogin);progressBar = (ProgressBar) findViewById(R.id.progressBar);btnLogin.setOnClickListener(this);}
@Override
public void onClick(View v) {
int id = v.getId();
switch (id) {
case R.id.btnLogin:
String username = etUsername.getText().toString();
String password = etPassword.getText().toString();
UserLoginPresenter userLoginPresenter = new UserLoginPresenter(this);
userLoginPresenter.login(username, password);
break;
}
}public void showLoading() {
progressBar.setVisibility(View.VISIBLE);
}public void hideLoading() {
progressBar.setVisibility(View.GONE);
}public void onInputError() {
Toast.makeText(LoginActivityMvp.this, “输入错误…”, Toast.LENGTH_SHORT).show();
}public void onLoginOk(UserLoginBean userLoginBean) {
//登录成功,跳转界面
Toast.makeText(LoginActivityMvp.this, “欢迎回来:” + userLoginBean.getUser().getUsername(), Toast.LENGTH_SHORT).show();
Intent intent = new Intent();
intent.putExtra(“username”, userLoginBean.getUser().getUsername());
intent.putExtra(“uId”, userLoginBean.getUser().getId() + “”);
intent.setClass(LoginActivityMvp.this, UserDetailActivity.class);
startActivity(intent);
finish();
}public void onLoginError() {
}
}
impl包:
package com.gordon.androidmvcmvp.mvp.presenter.impl;
/**
- author : gordon
- e-mail : gordon_sun07@163.com
- date : 2020/3/1 23:59
- version: 1.0
- desc :
*/
public interface IUserLoginPresenter {
void login(String username, String password);
}
presenter包:
package com.gordon.androidmvcmvp.mvp.presenter;
import android.text.TextUtils;
import com.gordon.androidmvcmvp.mvp.bean.UserLoginBean;
import com.gordon.androidmvcmvp.mvp.model.UserLoginModel;
import com.gordon.androidmvcmvp.mvp.presenter.impl.IUserLoginPresenter;
import com.gordon.androidmvcmvp.mvp.view.ILoginView;
/**
-
author : gordon
-
e-mail : gordon_sun07@163.com
-
date : 2020/3/1 22:08
-
version: 1.0
-
desc : 登录模块的业务逻辑
*/
public class UserLoginPresenter implements IUserLoginPresenter {private ILoginView loginView;
public UserLoginPresenter(ILoginView loginView) {
this.loginView = loginView;
}public void login(String username, String password) {
//本地对输入情况做校验,都不为空的时候才请求服务器
boolean validateOk = validateInput(username, password);
if (validateOk) {
loginView.showLoading();
UserLoginModel userLoginModel = new UserLoginModel();
userLoginModel.login(username, password, new UserLoginModel.OnNetResponseListener() {
@Override
public void onNetResponseOk(UserLoginBean userLoginBean) {
loginView.hideLoading();
if (userLoginBean.getStatus() == 200) {
loginView.onLoginOk(userLoginBean);
} else {
loginView.onLoginError();
}
}@Overridepublic void onNetResponseError(String msg) {loginView.hideLoading();loginView.onInputError();}});} else {loginView.onInputError();}}
//校验输入是否为空
private boolean validateInput(String username, String password) {
if (!TextUtils.isEmpty(username) && !TextUtils.isEmpty(password)) {
return true;
} else {
return false;
}
}
}
impl 包:
package com.gordon.androidmvcmvp.mvp.view;
import com.gordon.androidmvcmvp.mvp.bean.UserLoginBean;
/**
-
author : gordon
-
e-mail : gordon_sun07@163.com
-
date : 2020/3/1 23:52
-
version: 1.0
-
desc :
*/
public interface ILoginView {public void showLoading();
public void hideLoading();
public void onInputError();
public void onLoginOk(UserLoginBean userLoginBean);
public void onLoginError();
}
view包:Fragement
package com.gordon.androidmvcmvp.mvp.view.impl;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import com.gordon.androidmvcmvp.R;
import com.gordon.androidmvcmvp.mvp.bean.UserLoginBean;
import com.gordon.androidmvcmvp.mvp.presenter.UserLoginPresenter;
import com.gordon.androidmvcmvp.mvp.view.ILoginView;
/**
-
author : gordon
-
e-mail : gordon_sun07@163.com
-
date : 2020/3/1 23:46
-
version: 1.0
-
desc :
*/
public class UserLoginFragment extends Fragment implements View.OnClickListener, ILoginView {private EditText etUsername;
private EditText etPassword;
private Button btnLogin;
private ProgressBar progressBar;@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = View.inflate(getActivity(), R.layout.activity_login, null);
etUsername = (EditText) view.findViewById(R.id.etUsername);
etPassword = (EditText) view.findViewById(R.id.etPassword);
btnLogin = (Button) view.findViewById(R.id.btnLogin);
progressBar = (ProgressBar) view.findViewById(R.id.progressBar);
btnLogin.setOnClickListener(this);
return view;
}@Override
public void onClick(View v) {
int id = v.getId();
switch (id) {
case R.id.btnLogin:
String username = etUsername.getText().toString();
String password = etPassword.getText().toString();
UserLoginPresenter userLoginPresenter = new UserLoginPresenter(this);
userLoginPresenter.login(username, password);
break;
}
}@Override
public void showLoading() {}
@Override
public void hideLoading() {}
@Override
public void onInputError() {}
@Override
public void onLoginOk(UserLoginBean userLoginBean) {}
@Override
public void onLoginError() {}
}
activity:
package com.gordon.androidmvcmvp.mvp.view.impl;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.Toast;
import com.gordon.androidmvcmvp.R;
import com.gordon.androidmvcmvp.UserDetailActivity;
import com.gordon.androidmvcmvp.mvp.bean.UserLoginBean;
import com.gordon.androidmvcmvp.mvp.presenter.UserLoginPresenter;
import com.gordon.androidmvcmvp.mvp.view.ILoginView;
/**
-
M:Model 模型层,产生数据
-
V:View 视图层
-
P:Controller 逻辑控制层
*/
public class LoginActivityMvp extends AppCompatActivity implements View.OnClickListener, ILoginView {private EditText etUsername;
private EditText etPassword;
private Button btnLogin;
private ProgressBar progressBar;@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);etUsername = (EditText) findViewById(R.id.etUsername);etPassword = (EditText) findViewById(R.id.etPassword);btnLogin = (Button) findViewById(R.id.btnLogin);progressBar = (ProgressBar) findViewById(R.id.progressBar);btnLogin.setOnClickListener(this);}
@Override
public void onClick(View v) {
int id = v.getId();
switch (id) {
case R.id.btnLogin:
String username = etUsername.getText().toString();
String password = etPassword.getText().toString();
UserLoginPresenter userLoginPresenter = new UserLoginPresenter(this);
userLoginPresenter.login(username, password);
break;
}
}public void showLoading() {
progressBar.setVisibility(View.VISIBLE);
}public void hideLoading() {
progressBar.setVisibility(View.GONE);
}public void onInputError() {
Toast.makeText(LoginActivityMvp.this, “输入错误…”, Toast.LENGTH_SHORT).show();
}public void onLoginOk(UserLoginBean userLoginBean) {
//登录成功,跳转界面
Toast.makeText(LoginActivityMvp.this, “欢迎回来:” + userLoginBean.getUser().getUsername(), Toast.LENGTH_SHORT).show();
Intent intent = new Intent();
intent.putExtra(“username”, userLoginBean.getUser().getUsername());
intent.putExtra(“uId”, userLoginBean.getUser().getId() + “”);
intent.setClass(LoginActivityMvp.this, UserDetailActivity.class);
startActivity(intent);
finish();
}public void onLoginError() {
}
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
