一.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();
}
}