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() {

    }
    }


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部