先添加依赖:
compile 'com.squareup.okhttp3:okhttp:3.9.0'
compile 'com.squareup.okhttp3:logging-interceptor:3.9.0'
compile 'com.google.code.gson:gson:2.8.2'
compile 'com.youth.banner:banner:1.4.10'
compile 'com.android.support:recyclerview-v7:26.0.0-alpha1'
appceng:
返回上一层:
import android.app.Application;
import com.facebook.drawee.backends.pipeline.Fresco;
/**
* Created by peng on 2017/11/9.
*/
public class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
Fresco.initialize(this);
}
}
Model层:
登录接口:
package mvpframework.bwie.com.a1509aproject.model.IModel;
import mvpframework.bwie.com.a1509aproject.bean.LoginBean;
import mvpframework.bwie.com.a1509aproject.net.OnNetListener;
/**
* Created by peng on 2017/11/7.
*/
public interface ILoginModel {
public void login(String account, String pwd, OnNetListener<LoginBean> onNetListener);
}
登录:
package mvpframework.bwie.com.a1509aproject.model;
import com.google.gson.Gson;
import java.io.IOException;
import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.Map;
import mvpframework.bwie.com.a1509aproject.bean.LoginBean;
import mvpframework.bwie.com.a1509aproject.model.IModel.ILoginModel;
import mvpframework.bwie.com.a1509aproject.net.Api;
import mvpframework.bwie.com.a1509aproject.net.HttpUtils;
import mvpframework.bwie.com.a1509aproject.net.OnNetListener;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;
/**
* Created by peng on 2017/11/7.
*/
public class LoginModel extends BaseModel implements ILoginModel {
@Override
public void login(String account, String pwd, final OnNetListener<LoginBean> onNetListener) {
Map<String, String> params = new HashMap<>();
params.put("mobile", account);
params.put("password", pwd);
HttpUtils.getHttpUtils().doPost(Api.LOGIN, params, new Callback() {
@Override
public void onFailure(Call call, final IOException e) {
handler.post(new Runnable() {
@Override
public void run() {
onNetListener.onFailure(e);
}
});
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String string = response.body().string();
final LoginBean loginBean = new Gson().fromJson(string, (Type) LoginBean.class);
handler.post(new Runnable() {
@Override
public void run() {
onNetListener.onSuccess(loginBean);
}
});
}
});
}
}
注册接口:
package mvpframework.bwie.com.a1509aproject.model.IModel;
import mvpframework.bwie.com.a1509aproject.bean.BaseBean;
import mvpframework.bwie.com.a1509aproject.net.OnNetListener;
/**
* Created by peng on 2017/11/7.
*/
public interface IRegisterModel {
public void register(String account, String pwd, OnNetListener<BaseBean> onNetListener);
}
注册:
package mvpframework.bwie.com.a1509aproject.model;
import com.google.gson.Gson;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import mvpframework.bwie.com.a1509aproject.bean.BaseBean;
import mvpframework.bwie.com.a1509aproject.model.IModel.IRegisterModel;
import mvpframework.bwie.com.a1509aproject.net.Api;
import mvpframework.bwie.com.a1509aproject.net.HttpUtils;
import mvpframework.bwie.com.a1509aproject.net.OnNetListener;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;
/**
* Created by peng on 2017/11/7.
* 真正的网络请求,去注册
*/
public class RegisterModel extends BaseModel implements IRegisterModel {
@Override
public void register(String account, String pwd, final OnNetListener<BaseBean> onNetListener) {
Map<String, String> params = new HashMap<>();
params.put("mobile", account);
params.put("password", pwd);
HttpUtils.getHttpUtils().doPost(Api.REGISTER, params, new Callback() {
@Override
public void onFailure(Call call, final IOException e) {
handler.post(new Runnable() {
@Override
public void run() {
onNetListener.onFailure(e);
}
});
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String string = response.body().string();
final BaseBean baseBean = new Gson().fromJson(string, BaseBean.class);
handler.post(new Runnable() {
@Override
public void run() {
onNetListener.onSuccess(baseBean);
}
});
}
});
}
}
成功跳界面转接口:
package mvpframework.bwie.com.a1509aproject.model.IModel;
import mvpframework.bwie.com.a1509aproject.bean.Catagory;
import mvpframework.bwie.com.a1509aproject.bean.ProductCatagoryBean;
import mvpframework.bwie.com.a1509aproject.net.OnNetListener;
/**
* Created by peng on 2017/11/7.
*/
public interface IClassModel {
public void getCatagory(OnNetListener<Catagory> onNetListener);
public void getProductCatagory(String cid, OnNetListener<ProductCatagoryBean> onNetListener);
}
成功跳界面转:
package mvpframework.bwie.com.a1509aproject.model;
import com.google.gson.Gson;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import mvpframework.bwie.com.a1509aproject.bean.Catagory;
import mvpframework.bwie.com.a1509aproject.bean.ProductCatagoryBean;
import mvpframework.bwie.com.a1509aproject.model.IModel.IClassModel;
import mvpframework.bwie.com.a1509aproject.net.Api;
import mvpframework.bwie.com.a1509aproject.net.HttpUtils;
import mvpframework.bwie.com.a1509aproject.net.OnNetListener;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;
/**
* Created by peng on 2017/11/7.
* 获取分类的model
*/
public class ClassModel extends BaseModel implements IClassModel {
@Override
public void getCatagory(final OnNetListener<Catagory> onNetListener) {
HttpUtils.getHttpUtils().doGet(Api.CLASS, new Callback() {
@Override
public void onFailure(Call call, final IOException e) {
handler.post(new Runnable() {
@Override
public void run() {
onNetListener.onFailure(e);
}
});
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String string = response.body().string();
final Catagory catagory = new Gson().fromJson(string, Catagory.class);
handler.post(new Runnable() {
@Override
public void run() {
onNetListener.onSuccess(catagory);
}
});
}
});
}
@Override
public void getProductCatagory(String cid, final OnNetListener<ProductCatagoryBean> onNetListener) {
Map<String, String> params = new HashMap<>();
params.put("cid", cid);
HttpUtils.getHttpUtils().doPost(Api.PRODUCT_CATAGORY, params, new Callback() {
@Override
public void onFailure(Call call, final IOException e) {
handler.post(new Runnable() {
@Override
public void run() {
onNetListener.onFailure(e);
}
});
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String string = response.body().string();
final ProductCatagoryBean productCatagoryBean = new Gson().fromJson(string, ProductCatagoryBean.class);
handler.post(new Runnable() {
@Override
public void run() {
onNetListener.onSuccess(productCatagoryBean);
}
});
}
});
}
}
集合所有Model父类:
package mvpframework.bwie.com.a1509aproject.model;
import android.os.Handler;
import android.os.Looper;
/**
* Created by peng on 2017/11/7.
* 所有Model的父类,里面主要是封装了Handler,避免每一个Model都去创建一个Handler
*/
public class BaseModel {
protected Handler handler = new Handler(Looper.getMainLooper());
}
Presenter层:
登录层:
package mvpframework.bwie.com.a1509aproject.presenter;
import android.text.TextUtils;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import mvpframework.bwie.com.a1509aproject.bean.LoginBean;
import mvpframework.bwie.com.a1509aproject.model.IModel.ILoginModel;
import mvpframework.bwie.com.a1509aproject.model.IModel.IRegisterModel;
import mvpframework.bwie.com.a1509aproject.model.LoginModel;
import mvpframework.bwie.com.a1509aproject.model.RegisterModel;
import mvpframework.bwie.com.a1509aproject.net.OnNetListener;
import mvpframework.bwie.com.a1509aproject.view.IView.IMainActivity;
/**
* Created by peng on 2017/11/7.
* MainActiivty对应的 P 层
*/
public class MainPresenter {
private IMainActivity iMainActivity;
private final ILoginModel iLoginModel;
private final IRegisterModel iRegisterModel;
public MainPresenter(IMainActivity iMainActivity) {
this.iMainActivity = iMainActivity;
iLoginModel = new LoginModel();
iRegisterModel = new RegisterModel();
}
public void login() {
String account = iMainActivity.getAccount();
String pwd = iMainActivity.getPwd();
//判断账号密码是否正确
if (checkAccount(account) && checkPwd(pwd)) {
//去调用model,进行登陆
iLoginModel.login(account, pwd, new OnNetListener<LoginBean>() {
@Override
public void onSuccess(LoginBean loginBean) {
//保存登陆成功后的数据,可以保存到SP,也可以保存到数据库
iMainActivity.show(loginBean.getMsg());
//跳转到分类界面
iMainActivity.toClassAc();
}
@Override
public void onFailure(Exception e) {
}
});
}
}
private boolean checkPwd(String pwd) {
if (TextUtils.isEmpty(pwd)) {
//给用户提示,输入的账号不能为空
iMainActivity.show("请输入密码");
return false;
}
if (pwd.length() != 6) {
iMainActivity.show("请输入6位密码");
return false;
}
return true;
}
/**
* 验证手机号是否正确
*
* @param account
*/
private boolean checkAccount(String account) {
if (TextUtils.isEmpty(account)) {
//给用户提示,输入的账号不能为空
iMainActivity.show("请输入账号");
return false;
}
if (!isMobileNO(account)) {
iMainActivity.show("请输入正确的手机号");
return false;
}
return true;
}
/*
判断是否是手机号
*/
public static boolean isMobileNO(String mobiles) {
Pattern p = Pattern.compile("^(13[0-9]|14[57]|15[0-35-9]|17[6-8]|18[0-9])[0-9]{8}$");
Matcher m = p.matcher(mobiles);
return m.matches();
}
public void register() {
//其实就是跳转到注册页面
iMainActivity.toRegisterAc();
}
}
注册类:
package mvpframework.bwie.com.a1509aproject.presenter;
import android.text.TextUtils;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import mvpframework.bwie.com.a1509aproject.bean.BaseBean;
import mvpframework.bwie.com.a1509aproject.model.IModel.IRegisterModel;
import mvpframework.bwie.com.a1509aproject.model.RegisterModel;
import mvpframework.bwie.com.a1509aproject.net.OnNetListener;
import mvpframework.bwie.com.a1509aproject.view.IView.IRegisterActivity;
/**
* Created by peng on 2017/11/7.
* MainActiivty对应的 P 层
*/
public class RegisterPresenter {
private IRegisterActivity iRegisterActivity;
private final IRegisterModel iRegisterModel;
public RegisterPresenter(IRegisterActivity iRegisterActivity) {
this.iRegisterActivity = iRegisterActivity;
iRegisterModel = new RegisterModel();
}
private boolean checkPwd(String pwd) {
if (TextUtils.isEmpty(pwd)) {
//给用户提示,输入的账号不能为空
iRegisterActivity.show("请输入密码");
return false;
}
if (pwd.length() != 6) {
iRegisterActivity.show("请输入6位密码");
return false;
}
return true;
}
/**
* 验证手机号是否正确
*
* @param account
*/
private boolean checkAccount(String account) {
if (TextUtils.isEmpty(account)) {
//给用户提示,输入的账号不能为空
iRegisterActivity.show("请输入账号");
return false;
}
if (!isMobileNO(account)) {
iRegisterActivity.show("请输入正确的手机号");
return false;
}
return true;
}
/*
判断是否是手机号
*/
public static boolean isMobileNO(String mobiles) {
Pattern p = Pattern.compile("^(13[0-9]|14[57]|15[0-35-9]|17[6-8]|18[0-9])[0-9]{8}$");
Matcher m = p.matcher(mobiles);
return m.matches();
}
public void register() {
String account = iRegisterActivity.getAccount();
String pwd = iRegisterActivity.getPwd();
//判断账号密码是否正确
if (checkAccount(account) && checkPwd(pwd)) {
iRegisterModel.register(account, pwd, new OnNetListener<BaseBean>() {
@Override
public void onSuccess(BaseBean baseBean) {
//成功以后,回到登陆界面
if (baseBean.getCode().equals("1")) {
iRegisterActivity.show(baseBean.getMsg());
} else {
iRegisterActivity.show(baseBean.getMsg());
iRegisterActivity.finishAc();
}
}
@Override
public void onFailure(Exception e) {
}
});
}
}
}
跳转界面:
package mvpframework.bwie.com.a1509aproject.presenter;
import java.util.List;
import mvpframework.bwie.com.a1509aproject.bean.Catagory;
import mvpframework.bwie.com.a1509aproject.bean.ProductCatagoryBean;
import mvpframework.bwie.com.a1509aproject.model.ClassModel;
import mvpframework.bwie.com.a1509aproject.model.IModel.IClassModel;
import mvpframework.bwie.com.a1509aproject.net.OnNetListener;
import mvpframework.bwie.com.a1509aproject.view.IView.IClassActivity;
/**
* Created by peng on 2017/11/7.
*/
public class ClassPresenter {
private final IClassModel iclassModel;
private IClassActivity iClassActivity;
public ClassPresenter(IClassActivity iClassActivity) {
this.iClassActivity = iClassActivity;
iclassModel = new ClassModel();
}
public void getProductCatagory(String cid) {
iclassModel.getProductCatagory(cid + "", new OnNetListener<ProductCatagoryBean>() {
@Override
public void onSuccess(ProductCatagoryBean productCatagoryBean) {
//给二级列表设置数据
iClassActivity.showElvData(productCatagoryBean.getData());
}
@Override
public void onFailure(Exception e) {
}
});
}
//获取分类
public void getCatagory() {
iclassModel.getCatagory(new OnNetListener<Catagory>() {
@Override
public void onSuccess(Catagory catagory) {
iClassActivity.showData(catagory.getData());
//拿到右侧第一条数据
List<Catagory.DataBean> dataBean = catagory.getData();
int cid = dataBean.get(0).getCid();
//获取右侧的数据
getProductCatagory(cid + "");
}
@Override
public void onFailure(Exception e) {
}
});
}
}
用于保存已经开启的Activity;
package mvpframework.bwie.com.a1509aproject.utils;
import android.app.Activity;
import java.util.LinkedList;
import java.util.List;
/**
* Created by peng on 2017/11/7.
* 用于保存已经开启的Activity
*/
public class ActivityStroreUtil {
private static List<Activity> list = new LinkedList<>();
/**
* 用集合保存所有开启的Activity
*
* @param ac
*/
public static void addActivity(Activity ac) {
list.add(ac);
}
/**
* 关闭已经开启的Activity
*/
public void finishAll() {
for (Activity ac : list) {
if (ac != null)
ac.finish();
}
}
}
view层:
调用 ActivityStroreUtil;
package mvpframework.bwie.com.a1509aproject.view;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import mvpframework.bwie.com.a1509aproject.utils.ActivityStroreUtil;
public class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityStroreUtil.addActivity(this);
}
}
主类接口:
package mvpframework.bwie.com.a1509aproject.view.IView;
/**
* Created by peng on 2017/11/7.
*/
public interface IMainActivity {
public String getAccount();
public String getPwd();
public void show(String str);
public void toRegisterAc();
public void toClassAc();
}
主类:
package mvpframework.bwie.com.a1509aproject.view;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import mvpframework.bwie.com.a1509aproject.R;
import mvpframework.bwie.com.a1509aproject.presenter.MainPresenter;
import mvpframework.bwie.com.a1509aproject.view.IView.IMainActivity;
/**
*
*/
public class MainActivity extends BaseActivity implements View.OnClickListener, IMainActivity {
private ImageView mIvBack;
/**
* 手机号
*/
private EditText mEtPhone;
/**
* 请输入密码
*/
private EditText mEtPwd;
private ImageView mIvPwd;
/**
* 登陆
*/
private Button mBtLogin;
/**
* 请注册
*/
private TextView mTvRegister;
private MainPresenter mainPresenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//关联presenter
mainPresenter = new MainPresenter(this);
initView();
}
private void initView() {
mIvBack = (ImageView) findViewById(R.id.iv_back);
mEtPhone = (EditText) findViewById(R.id.et_phone);
mEtPwd = (EditText) findViewById(R.id.et_pwd);
mIvPwd = (ImageView) findViewById(R.id.iv_pwd);
mBtLogin = (Button) findViewById(R.id.bt_login);
mBtLogin.setOnClickListener(this);
mTvRegister = (TextView) findViewById(R.id.tv_register);
mTvRegister.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.bt_login:
mainPresenter.login();
break;
case R.id.tv_register:
//注册
mainPresenter.register();
break;
}
}
@Override
public String getAccount() {
return mEtPhone.getText().toString().trim();
}
@Override
public String getPwd() {
return mEtPwd.getText().toString().trim();
}
@Override
public void show(String str) {
Toast.makeText(MainActivity.this, str, Toast.LENGTH_SHORT).show();
}
@Override
public void toRegisterAc() {
Intent intent = new Intent(MainActivity.this, RegisterActivity.class);
startActivity(intent);
}
@Override
public void toClassAc() {
Intent intent = new Intent(MainActivity.this, ClassActivity.class);
startActivity(intent);
}
}
注册接口:
package mvpframework.bwie.com.a1509aproject.view.IView;
/**
* Created by peng on 2017/11/7.
*/
public interface IRegisterActivity {
public String getAccount();
public String getPwd();
public void finishAc();
public void show(String str);
}
注册页面:
package mvpframework.bwie.com.a1509aproject.view;
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.ImageView;
import android.widget.Toast;
import mvpframework.bwie.com.a1509aproject.R;
import mvpframework.bwie.com.a1509aproject.presenter.RegisterPresenter;
import mvpframework.bwie.com.a1509aproject.view.IView.IRegisterActivity;
public class RegisterActivity extends AppCompatActivity implements IRegisterActivity, View.OnClickListener {
private ImageView mIvBack;
/**
* 手机号
*/
private EditText mEtPhone;
/**
* 请输入密码
*/
private EditText mEtPwd;
private ImageView mIvPwd;
/**
* 注册
*/
private Button mBtLogin;
private RegisterPresenter registerPresenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
registerPresenter = new RegisterPresenter(this);
initView();
}
private void initView() {
mIvBack = (ImageView) findViewById(R.id.iv_back);
mEtPhone = (EditText) findViewById(R.id.et_phone);
mEtPwd = (EditText) findViewById(R.id.et_pwd);
mIvPwd = (ImageView) findViewById(R.id.iv_pwd);
mBtLogin = (Button) findViewById(R.id.bt_login);
mBtLogin.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
default:
break;
case R.id.bt_login:
//注册
registerPresenter.register();
break;
}
}
@Override
public String getAccount() {
return mEtPhone.getText().toString().trim();
}
@Override
public String getPwd() {
return mEtPwd.getText().toString().trim();
}
@Override
public void finishAc() {
finish();
}
@Override
public void show(String str) {
Toast.makeText(RegisterActivity.this, str, Toast.LENGTH_SHORT).show();
}
}
bean层:
成功失败:
package mvpframework.bwie.com.a1509aproject.bean;
/**
* Created by peng on 2017/11/7.
*/
public class BaseBean {
private String code;
private String msg;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
compile 'com.squareup.okhttp3:okhttp:3.9.0'
compile 'com.squareup.okhttp3:logging-interceptor:3.9.0'
compile 'com.google.code.gson:gson:2.8.2'
compile 'com.youth.banner:banner:1.4.10'
compile 'com.android.support:recyclerview-v7:26.0.0-alpha1'
compile 'com.facebook.fresco:fresco:1.5.0'
net网络请求:
HttpUtils:
package mvpframework.bwie.com.a1509aproject.net; import java.util.Map; import okhttp3.Callback; import okhttp3.FormBody; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.logging.HttpLoggingInterceptor; /** * Created by peng on 2017/11/7. * 网络请求工具类 */ public class HttpUtils { private static HttpUtils httpUtils; private final OkHttpClient client; private HttpUtils() { //创建OkHttpClient //创建拦截器 HttpLoggingInterceptor logging = new HttpLoggingInterceptor(); logging.setLevel(HttpLoggingInterceptor.Level.BODY); client = new OkHttpClient.Builder() .addInterceptor(logging) .build(); } public static HttpUtils getHttpUtils() { if (httpUtils == null) { synchronized (HttpUtils.class) { if (httpUtils == null) { httpUtils = new HttpUtils(); } } } return httpUtils; } /** * GET请求 * * @param url 请求地址 * @param callback 回调 */ public void doGet(String url, Callback callback) { Request request = new Request.Builder().url(url).build(); client.newCall(request).enqueue(callback); } /** * POST请求 * * @param url 请求地址 * @param params 请求的参数 * @param callback 回调 */ public void doPost(String url, Map<String, String> params, Callback callback) { //这里可以加网络判断 //判断参数 if (params == null || params.size() == 0) { throw new RuntimeException("params is null!!!"); } // 创建Request FormBody.Builder builder = new FormBody.Builder(); for (Map.Entry<String, String> entry : params.entrySet()) { builder.add(entry.getKey(), entry.getValue()); } FormBody formBody = builder.build(); Request request = new Request.Builder() .url(url) .post(formBody) .build(); client.newCall(request).enqueue(callback); } }Api:
package mvpframework.bwie.com.a1509aproject.net; /** * Created by peng on 2017/11/7. */ public interface Api { public static boolean isOnline = false; public static final String DEV = "http://120.27.23.105/"; public static final String WROK = ""; public static final String HOST = isOnline ? WROK : DEV; public static final String LOGIN = HOST + "user/login";//登陆 public static final String REGISTER = HOST + "user/reg";//注册 public static final String CLASS = HOST + "product/getCatagory";//分类 public static final String PRODUCT_CATAGORY = HOST + "product/getProductCatagory";//商品子分类接口 }OnNetListener:
package mvpframework.bwie.com.a1509aproject.net; /** * Created by peng on 2017/11/7. * 网络请求回调接口 */ public interface OnNetListener<T> { //成功回调 public void onSuccess(T t); //失败回调 public void onFailure(Exception e); }
appceng:
返回上一层:
import android.app.Application;
import com.facebook.drawee.backends.pipeline.Fresco;
/**
* Created by peng on 2017/11/9.
*/
public class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
Fresco.initialize(this);
}
}
Model层:
登录接口:
package mvpframework.bwie.com.a1509aproject.model.IModel;
import mvpframework.bwie.com.a1509aproject.bean.LoginBean;
import mvpframework.bwie.com.a1509aproject.net.OnNetListener;
/**
* Created by peng on 2017/11/7.
*/
public interface ILoginModel {
public void login(String account, String pwd, OnNetListener<LoginBean> onNetListener);
}
登录:
package mvpframework.bwie.com.a1509aproject.model;
import com.google.gson.Gson;
import java.io.IOException;
import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.Map;
import mvpframework.bwie.com.a1509aproject.bean.LoginBean;
import mvpframework.bwie.com.a1509aproject.model.IModel.ILoginModel;
import mvpframework.bwie.com.a1509aproject.net.Api;
import mvpframework.bwie.com.a1509aproject.net.HttpUtils;
import mvpframework.bwie.com.a1509aproject.net.OnNetListener;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;
/**
* Created by peng on 2017/11/7.
*/
public class LoginModel extends BaseModel implements ILoginModel {
@Override
public void login(String account, String pwd, final OnNetListener<LoginBean> onNetListener) {
Map<String, String> params = new HashMap<>();
params.put("mobile", account);
params.put("password", pwd);
HttpUtils.getHttpUtils().doPost(Api.LOGIN, params, new Callback() {
@Override
public void onFailure(Call call, final IOException e) {
handler.post(new Runnable() {
@Override
public void run() {
onNetListener.onFailure(e);
}
});
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String string = response.body().string();
final LoginBean loginBean = new Gson().fromJson(string, (Type) LoginBean.class);
handler.post(new Runnable() {
@Override
public void run() {
onNetListener.onSuccess(loginBean);
}
});
}
});
}
}
注册接口:
package mvpframework.bwie.com.a1509aproject.model.IModel;
import mvpframework.bwie.com.a1509aproject.bean.BaseBean;
import mvpframework.bwie.com.a1509aproject.net.OnNetListener;
/**
* Created by peng on 2017/11/7.
*/
public interface IRegisterModel {
public void register(String account, String pwd, OnNetListener<BaseBean> onNetListener);
}
注册:
package mvpframework.bwie.com.a1509aproject.model;
import com.google.gson.Gson;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import mvpframework.bwie.com.a1509aproject.bean.BaseBean;
import mvpframework.bwie.com.a1509aproject.model.IModel.IRegisterModel;
import mvpframework.bwie.com.a1509aproject.net.Api;
import mvpframework.bwie.com.a1509aproject.net.HttpUtils;
import mvpframework.bwie.com.a1509aproject.net.OnNetListener;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;
/**
* Created by peng on 2017/11/7.
* 真正的网络请求,去注册
*/
public class RegisterModel extends BaseModel implements IRegisterModel {
@Override
public void register(String account, String pwd, final OnNetListener<BaseBean> onNetListener) {
Map<String, String> params = new HashMap<>();
params.put("mobile", account);
params.put("password", pwd);
HttpUtils.getHttpUtils().doPost(Api.REGISTER, params, new Callback() {
@Override
public void onFailure(Call call, final IOException e) {
handler.post(new Runnable() {
@Override
public void run() {
onNetListener.onFailure(e);
}
});
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String string = response.body().string();
final BaseBean baseBean = new Gson().fromJson(string, BaseBean.class);
handler.post(new Runnable() {
@Override
public void run() {
onNetListener.onSuccess(baseBean);
}
});
}
});
}
}
成功跳界面转接口:
package mvpframework.bwie.com.a1509aproject.model.IModel;
import mvpframework.bwie.com.a1509aproject.bean.Catagory;
import mvpframework.bwie.com.a1509aproject.bean.ProductCatagoryBean;
import mvpframework.bwie.com.a1509aproject.net.OnNetListener;
/**
* Created by peng on 2017/11/7.
*/
public interface IClassModel {
public void getCatagory(OnNetListener<Catagory> onNetListener);
public void getProductCatagory(String cid, OnNetListener<ProductCatagoryBean> onNetListener);
}
成功跳界面转:
package mvpframework.bwie.com.a1509aproject.model;
import com.google.gson.Gson;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import mvpframework.bwie.com.a1509aproject.bean.Catagory;
import mvpframework.bwie.com.a1509aproject.bean.ProductCatagoryBean;
import mvpframework.bwie.com.a1509aproject.model.IModel.IClassModel;
import mvpframework.bwie.com.a1509aproject.net.Api;
import mvpframework.bwie.com.a1509aproject.net.HttpUtils;
import mvpframework.bwie.com.a1509aproject.net.OnNetListener;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;
/**
* Created by peng on 2017/11/7.
* 获取分类的model
*/
public class ClassModel extends BaseModel implements IClassModel {
@Override
public void getCatagory(final OnNetListener<Catagory> onNetListener) {
HttpUtils.getHttpUtils().doGet(Api.CLASS, new Callback() {
@Override
public void onFailure(Call call, final IOException e) {
handler.post(new Runnable() {
@Override
public void run() {
onNetListener.onFailure(e);
}
});
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String string = response.body().string();
final Catagory catagory = new Gson().fromJson(string, Catagory.class);
handler.post(new Runnable() {
@Override
public void run() {
onNetListener.onSuccess(catagory);
}
});
}
});
}
@Override
public void getProductCatagory(String cid, final OnNetListener<ProductCatagoryBean> onNetListener) {
Map<String, String> params = new HashMap<>();
params.put("cid", cid);
HttpUtils.getHttpUtils().doPost(Api.PRODUCT_CATAGORY, params, new Callback() {
@Override
public void onFailure(Call call, final IOException e) {
handler.post(new Runnable() {
@Override
public void run() {
onNetListener.onFailure(e);
}
});
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String string = response.body().string();
final ProductCatagoryBean productCatagoryBean = new Gson().fromJson(string, ProductCatagoryBean.class);
handler.post(new Runnable() {
@Override
public void run() {
onNetListener.onSuccess(productCatagoryBean);
}
});
}
});
}
}
集合所有Model父类:
package mvpframework.bwie.com.a1509aproject.model;
import android.os.Handler;
import android.os.Looper;
/**
* Created by peng on 2017/11/7.
* 所有Model的父类,里面主要是封装了Handler,避免每一个Model都去创建一个Handler
*/
public class BaseModel {
protected Handler handler = new Handler(Looper.getMainLooper());
}
Presenter层:
登录层:
package mvpframework.bwie.com.a1509aproject.presenter;
import android.text.TextUtils;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import mvpframework.bwie.com.a1509aproject.bean.LoginBean;
import mvpframework.bwie.com.a1509aproject.model.IModel.ILoginModel;
import mvpframework.bwie.com.a1509aproject.model.IModel.IRegisterModel;
import mvpframework.bwie.com.a1509aproject.model.LoginModel;
import mvpframework.bwie.com.a1509aproject.model.RegisterModel;
import mvpframework.bwie.com.a1509aproject.net.OnNetListener;
import mvpframework.bwie.com.a1509aproject.view.IView.IMainActivity;
/**
* Created by peng on 2017/11/7.
* MainActiivty对应的 P 层
*/
public class MainPresenter {
private IMainActivity iMainActivity;
private final ILoginModel iLoginModel;
private final IRegisterModel iRegisterModel;
public MainPresenter(IMainActivity iMainActivity) {
this.iMainActivity = iMainActivity;
iLoginModel = new LoginModel();
iRegisterModel = new RegisterModel();
}
public void login() {
String account = iMainActivity.getAccount();
String pwd = iMainActivity.getPwd();
//判断账号密码是否正确
if (checkAccount(account) && checkPwd(pwd)) {
//去调用model,进行登陆
iLoginModel.login(account, pwd, new OnNetListener<LoginBean>() {
@Override
public void onSuccess(LoginBean loginBean) {
//保存登陆成功后的数据,可以保存到SP,也可以保存到数据库
iMainActivity.show(loginBean.getMsg());
//跳转到分类界面
iMainActivity.toClassAc();
}
@Override
public void onFailure(Exception e) {
}
});
}
}
private boolean checkPwd(String pwd) {
if (TextUtils.isEmpty(pwd)) {
//给用户提示,输入的账号不能为空
iMainActivity.show("请输入密码");
return false;
}
if (pwd.length() != 6) {
iMainActivity.show("请输入6位密码");
return false;
}
return true;
}
/**
* 验证手机号是否正确
*
* @param account
*/
private boolean checkAccount(String account) {
if (TextUtils.isEmpty(account)) {
//给用户提示,输入的账号不能为空
iMainActivity.show("请输入账号");
return false;
}
if (!isMobileNO(account)) {
iMainActivity.show("请输入正确的手机号");
return false;
}
return true;
}
/*
判断是否是手机号
*/
public static boolean isMobileNO(String mobiles) {
Pattern p = Pattern.compile("^(13[0-9]|14[57]|15[0-35-9]|17[6-8]|18[0-9])[0-9]{8}$");
Matcher m = p.matcher(mobiles);
return m.matches();
}
public void register() {
//其实就是跳转到注册页面
iMainActivity.toRegisterAc();
}
}
注册类:
package mvpframework.bwie.com.a1509aproject.presenter;
import android.text.TextUtils;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import mvpframework.bwie.com.a1509aproject.bean.BaseBean;
import mvpframework.bwie.com.a1509aproject.model.IModel.IRegisterModel;
import mvpframework.bwie.com.a1509aproject.model.RegisterModel;
import mvpframework.bwie.com.a1509aproject.net.OnNetListener;
import mvpframework.bwie.com.a1509aproject.view.IView.IRegisterActivity;
/**
* Created by peng on 2017/11/7.
* MainActiivty对应的 P 层
*/
public class RegisterPresenter {
private IRegisterActivity iRegisterActivity;
private final IRegisterModel iRegisterModel;
public RegisterPresenter(IRegisterActivity iRegisterActivity) {
this.iRegisterActivity = iRegisterActivity;
iRegisterModel = new RegisterModel();
}
private boolean checkPwd(String pwd) {
if (TextUtils.isEmpty(pwd)) {
//给用户提示,输入的账号不能为空
iRegisterActivity.show("请输入密码");
return false;
}
if (pwd.length() != 6) {
iRegisterActivity.show("请输入6位密码");
return false;
}
return true;
}
/**
* 验证手机号是否正确
*
* @param account
*/
private boolean checkAccount(String account) {
if (TextUtils.isEmpty(account)) {
//给用户提示,输入的账号不能为空
iRegisterActivity.show("请输入账号");
return false;
}
if (!isMobileNO(account)) {
iRegisterActivity.show("请输入正确的手机号");
return false;
}
return true;
}
/*
判断是否是手机号
*/
public static boolean isMobileNO(String mobiles) {
Pattern p = Pattern.compile("^(13[0-9]|14[57]|15[0-35-9]|17[6-8]|18[0-9])[0-9]{8}$");
Matcher m = p.matcher(mobiles);
return m.matches();
}
public void register() {
String account = iRegisterActivity.getAccount();
String pwd = iRegisterActivity.getPwd();
//判断账号密码是否正确
if (checkAccount(account) && checkPwd(pwd)) {
iRegisterModel.register(account, pwd, new OnNetListener<BaseBean>() {
@Override
public void onSuccess(BaseBean baseBean) {
//成功以后,回到登陆界面
if (baseBean.getCode().equals("1")) {
iRegisterActivity.show(baseBean.getMsg());
} else {
iRegisterActivity.show(baseBean.getMsg());
iRegisterActivity.finishAc();
}
}
@Override
public void onFailure(Exception e) {
}
});
}
}
}
跳转界面:
package mvpframework.bwie.com.a1509aproject.presenter;
import java.util.List;
import mvpframework.bwie.com.a1509aproject.bean.Catagory;
import mvpframework.bwie.com.a1509aproject.bean.ProductCatagoryBean;
import mvpframework.bwie.com.a1509aproject.model.ClassModel;
import mvpframework.bwie.com.a1509aproject.model.IModel.IClassModel;
import mvpframework.bwie.com.a1509aproject.net.OnNetListener;
import mvpframework.bwie.com.a1509aproject.view.IView.IClassActivity;
/**
* Created by peng on 2017/11/7.
*/
public class ClassPresenter {
private final IClassModel iclassModel;
private IClassActivity iClassActivity;
public ClassPresenter(IClassActivity iClassActivity) {
this.iClassActivity = iClassActivity;
iclassModel = new ClassModel();
}
public void getProductCatagory(String cid) {
iclassModel.getProductCatagory(cid + "", new OnNetListener<ProductCatagoryBean>() {
@Override
public void onSuccess(ProductCatagoryBean productCatagoryBean) {
//给二级列表设置数据
iClassActivity.showElvData(productCatagoryBean.getData());
}
@Override
public void onFailure(Exception e) {
}
});
}
//获取分类
public void getCatagory() {
iclassModel.getCatagory(new OnNetListener<Catagory>() {
@Override
public void onSuccess(Catagory catagory) {
iClassActivity.showData(catagory.getData());
//拿到右侧第一条数据
List<Catagory.DataBean> dataBean = catagory.getData();
int cid = dataBean.get(0).getCid();
//获取右侧的数据
getProductCatagory(cid + "");
}
@Override
public void onFailure(Exception e) {
}
});
}
}
用于保存已经开启的Activity;
package mvpframework.bwie.com.a1509aproject.utils;
import android.app.Activity;
import java.util.LinkedList;
import java.util.List;
/**
* Created by peng on 2017/11/7.
* 用于保存已经开启的Activity
*/
public class ActivityStroreUtil {
private static List<Activity> list = new LinkedList<>();
/**
* 用集合保存所有开启的Activity
*
* @param ac
*/
public static void addActivity(Activity ac) {
list.add(ac);
}
/**
* 关闭已经开启的Activity
*/
public void finishAll() {
for (Activity ac : list) {
if (ac != null)
ac.finish();
}
}
}
view层:
调用 ActivityStroreUtil;
package mvpframework.bwie.com.a1509aproject.view;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import mvpframework.bwie.com.a1509aproject.utils.ActivityStroreUtil;
public class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityStroreUtil.addActivity(this);
}
}
主类接口:
package mvpframework.bwie.com.a1509aproject.view.IView;
/**
* Created by peng on 2017/11/7.
*/
public interface IMainActivity {
public String getAccount();
public String getPwd();
public void show(String str);
public void toRegisterAc();
public void toClassAc();
}
主类:
package mvpframework.bwie.com.a1509aproject.view;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import mvpframework.bwie.com.a1509aproject.R;
import mvpframework.bwie.com.a1509aproject.presenter.MainPresenter;
import mvpframework.bwie.com.a1509aproject.view.IView.IMainActivity;
/**
*
*/
public class MainActivity extends BaseActivity implements View.OnClickListener, IMainActivity {
private ImageView mIvBack;
/**
* 手机号
*/
private EditText mEtPhone;
/**
* 请输入密码
*/
private EditText mEtPwd;
private ImageView mIvPwd;
/**
* 登陆
*/
private Button mBtLogin;
/**
* 请注册
*/
private TextView mTvRegister;
private MainPresenter mainPresenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//关联presenter
mainPresenter = new MainPresenter(this);
initView();
}
private void initView() {
mIvBack = (ImageView) findViewById(R.id.iv_back);
mEtPhone = (EditText) findViewById(R.id.et_phone);
mEtPwd = (EditText) findViewById(R.id.et_pwd);
mIvPwd = (ImageView) findViewById(R.id.iv_pwd);
mBtLogin = (Button) findViewById(R.id.bt_login);
mBtLogin.setOnClickListener(this);
mTvRegister = (TextView) findViewById(R.id.tv_register);
mTvRegister.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.bt_login:
mainPresenter.login();
break;
case R.id.tv_register:
//注册
mainPresenter.register();
break;
}
}
@Override
public String getAccount() {
return mEtPhone.getText().toString().trim();
}
@Override
public String getPwd() {
return mEtPwd.getText().toString().trim();
}
@Override
public void show(String str) {
Toast.makeText(MainActivity.this, str, Toast.LENGTH_SHORT).show();
}
@Override
public void toRegisterAc() {
Intent intent = new Intent(MainActivity.this, RegisterActivity.class);
startActivity(intent);
}
@Override
public void toClassAc() {
Intent intent = new Intent(MainActivity.this, ClassActivity.class);
startActivity(intent);
}
}
注册接口:
package mvpframework.bwie.com.a1509aproject.view.IView;
/**
* Created by peng on 2017/11/7.
*/
public interface IRegisterActivity {
public String getAccount();
public String getPwd();
public void finishAc();
public void show(String str);
}
注册页面:
package mvpframework.bwie.com.a1509aproject.view;
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.ImageView;
import android.widget.Toast;
import mvpframework.bwie.com.a1509aproject.R;
import mvpframework.bwie.com.a1509aproject.presenter.RegisterPresenter;
import mvpframework.bwie.com.a1509aproject.view.IView.IRegisterActivity;
public class RegisterActivity extends AppCompatActivity implements IRegisterActivity, View.OnClickListener {
private ImageView mIvBack;
/**
* 手机号
*/
private EditText mEtPhone;
/**
* 请输入密码
*/
private EditText mEtPwd;
private ImageView mIvPwd;
/**
* 注册
*/
private Button mBtLogin;
private RegisterPresenter registerPresenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
registerPresenter = new RegisterPresenter(this);
initView();
}
private void initView() {
mIvBack = (ImageView) findViewById(R.id.iv_back);
mEtPhone = (EditText) findViewById(R.id.et_phone);
mEtPwd = (EditText) findViewById(R.id.et_pwd);
mIvPwd = (ImageView) findViewById(R.id.iv_pwd);
mBtLogin = (Button) findViewById(R.id.bt_login);
mBtLogin.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
default:
break;
case R.id.bt_login:
//注册
registerPresenter.register();
break;
}
}
@Override
public String getAccount() {
return mEtPhone.getText().toString().trim();
}
@Override
public String getPwd() {
return mEtPwd.getText().toString().trim();
}
@Override
public void finishAc() {
finish();
}
@Override
public void show(String str) {
Toast.makeText(RegisterActivity.this, str, Toast.LENGTH_SHORT).show();
}
}
bean层:
成功失败:
package mvpframework.bwie.com.a1509aproject.bean;
/**
* Created by peng on 2017/11/7.
*/
public class BaseBean {
private String code;
private String msg;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}