一.model层写一个接口
public interface IMyView {
//登陆成功的方法
void loginSuccess();
// 登陆失败的方法
void loginError(String error);
//获得 登陆 姓名
String getMobile();
//获得 登陆 密码
String getPassword();
}
二.model层主方法 实现上面的接口 IMyView
/**
* 登陆界面
* 1.首先登陆
* 2.假如没有注册过 就跳转到注册界面进行注册
*/
public class MainActivity extends AppCompatActivity implements IMyView {
@BindView(R.id.edit_name)
EditText edit_Name;
@BindView(R.id.edit_pass)
EditText edit_Pass;
@BindView(R.id.btn_denglu)
Button btn_Denglu;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
}
//成功的方法
@Override
public void loginSuccess() {
Toast.makeText(this, "登陆成功", Toast.LENGTH_SHORT).show();
startActivity(new Intent(this, GoodActivity.class));
}
//失败的方法
@Override
public void loginError(String error) {
Toast.makeText(this, "登陆失败,请注册", Toast.LENGTH_SHORT).show();
startActivity(new Intent(this, RegActivity.class));
}
//获得用户名
@Override
public String getMobile() {
return edit_Name.getText().toString();
}
//获得密码
@Override
public String getPassword() {
return edit_Pass.getText().toString();
}
//登陆点击事件
@OnClick(R.id.btn_denglu)
public void onViewClicked() {
Presenter presenter = new Presenter();
presenter.LoginPresenter(new MyModel(presenter), this);
Log.d("aaa", "-----登陆成功-----");
}
}
三.写一个网络请求类
public class HttpConfig {
public static String base_url = "http://120.27.23.105/";
// 展示 http://120.27.23.105/product/getProducts?pscid=39&page=1
public static String show_url="/product/getProducts";
}
四.写一个 RetrofitUtils 工具类
public class RetrofitUtils {
private static RetrofitUtils retrofitUtils;
private final Retrofit retrofit;
public static RetrofitUtils getRetrofitUtils() {
if (retrofitUtils == null) {
retrofitUtils = new RetrofitUtils();
}
return retrofitUtils;
}
public RetrofitUtils() {
retrofit = new Retrofit.Builder()
.baseUrl(HttpConfig.base_url)
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create(new Gson()))
.build();
}
public <T> T createService(Class<T> t) {
T t1 = retrofit.create(t);
return t1;
}
}
五.在model层写一个 MyService 接口
public interface MyService {
//登录
@FormUrlEncoded
@POST("user/login")
Observable<UserBean> loginPost(@FieldMap Map<String,String> map);
//注册
@FormUrlEncoded
@POST("user/reg")
Observable<RegBean> regPost(@FieldMap Map<String,String> map);
// 九宫格
@HTTP(method = "GET", path = "product/getCatagory")
Observable<Jiugongge_Bean> getJiuGongGe(@QueryMap Map<String, String> jiugongge_map);
六.在model层写一个IModel接口
public interface IModel {
//登录
void login(Map<String, String> map);
//注册
void reg(Map<String, String> map);
}
七.在model层写一个MyModel实现 IModel 接口
public class MyModel implements IModel {
private IPresenter iPresenter;
public MyModel(IPresenter iPresenter) {
this.iPresenter = iPresenter;
}
// ----------------------------登陆------------------------------
@Override
public void login(Map<String, String> map) {
RetrofitUtils retrofitUtils = RetrofitUtils.getRetrofitUtils();
MyService myService = retrofitUtils.createService(MyService.class);
myService.loginPost(map)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<UserBean>() {
@Override
public void onCompleted() {
Log.d("aaa", "----完成登陆-----");
}
@Override
public void onError(Throwable e) {
Log.d("aaa", "----失败登陆-----" + e.getMessage());
}
@Override
public void onNext(UserBean userBean) {
Log.d("aaa", "----正在执行 登陆-----");
if (userBean.getCode().equals("0")) {
iPresenter.getLogin(userBean);
} else {
iPresenter.getErrorData("请注册");
}
}
});
}
//-------------------------------------注册-----------------------------------
@Override
public void reg(Map<String, String> map) {
RetrofitUtils retrofitUtils = RetrofitUtils.getRetrofitUtils();
MyService myService = retrofitUtils.createService(MyService.class);
myService.regPost(map)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<RegBean>() {
@Override
public void onCompleted() {
Log.d("bbb", "----完成注册-----");
}
@Override
public void onError(Throwable e) {
Log.d("bbb", "----失败注册-----" + e.getMessage());
iPresenter.getRegErrorData("注册失败");
}
@Override
public void onNext(RegBean regBean) {
//chuanru presenter
Log.d("bbb", "----正在执行注册-----");
if (regBean.getCode().equals("0")) {
iPresenter.getReg(regBean);
} else {
iPresenter.getRegErrorData("注册失败");
}
}
});
}
}
八.在 presenter 层写一个 IPresenter 接口
public interface IPresenter {
//----------------------登陆------------------------------------------
void LoginPresenter(IModel iModel, IMyView iMyView);
// 接受成功
void getLogin(UserBean userBean);
//接受失败的提示
void getErrorData(String string);
// --------------------注册---------------------------------------------------
//注册
void regPresenter(IModel iModel, IRegView iRegView);
//接受注册成功参数
void getReg(RegBean regBean);
//接受注册失败的提示
void getRegErrorData(String string);
}
九.在 presenter 层写一个 Presenter类 实现 IPresenter 接口
public class Presenter implements IPresenter {
private IMyView iMyView;
private IRegView iRegView;
private GoodVIew goodVIew;
//---------------------登陆-----------------------------
@Override
public void LoginPresenter(IModel iModel, IMyView iMyView) {
this.iMyView = iMyView;
Map<String, String> map = new HashMap<>();
map.put("mobile", iMyView.getMobile());
map.put("password", iMyView.getPassword());
iModel.login(map);
}
//登陆成功
@Override
public void getLogin(UserBean userBean) {
iMyView.loginSuccess();
}
//登陆失败
@Override
public void getErrorData(String string) {
iMyView.loginError(string);
}
//-------------------------注册-------------------------------
@Override
public void regPresenter(IModel iModel, IRegView iRegView) {
this.iRegView = iRegView;
Map<String, String> map = new HashMap<>();
map.put("mobile", iRegView.getMobile());
map.put("password", iRegView.getPassword());
iModel.reg(map);
}
@Override
public void getReg(RegBean regBean) {
iRegView.register();
}
@Override
public void getRegErrorData(String string) {
iRegView.regError(string);
}
}
一.进行注册 界面
在model层 写一个接口 IRegView
/**
* 注册 接口
*/
public interface IRegView {
//注册
// 成功
void register();
//失败
void regError(String error);
//获得注册的 姓名
String getMobile();
//获得注册的 密码
String getPassword();
}
二.在model层 写一个类 RegActivity 实现 IRegView 接口
public class RegActivity extends AppCompatActivity implements IRegView {
@BindView(R.id.reg_edit_name)
EditText reg_EditName;
@BindView(R.id.reg_edit_pass)
EditText reg_EditPass;
@BindView(R.id.reg_btn_denglu)
Button reg_BtnDenglu;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_reg);
ButterKnife.bind(this);
}
//注册按钮
@OnClick(R.id.reg_btn_denglu)
public void onViewClicked() {
//调用p登录去
Presenter presenter = new Presenter();
presenter.regPresenter(new MyModel(presenter),this);
}
//注册成功
@Override
public void register() {
Log.d("bbb", "注册成功 --- 请登录");
Toast.makeText(this, "注册成功 --- 请登录", Toast.LENGTH_SHORT).show();
}
//注册失败
@Override
public void regError(String error) {
Toast.makeText(RegActivity.this, "--" + error, Toast.LENGTH_SHORT).show();
}
//获得姓名
@Override
public String getMobile() {
return reg_EditName.getText().toString();
}
//获得密码
@Override
public String getPassword() {
return reg_EditPass.getText().toString();
}
}