1, model layer writes an interface
public interface IMyView {
//How to login successfully
void loginSuccess();
// Method of login failure
void loginError(String error);
//Get login name
String getMobile();
//Get login password
String getPassword();
}
2, The main method of model layer implements the above interface IMyView
/**
* Login interface
* 1.touchdown
* 2.If you have not registered, you can jump to the registration interface to register
*/
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);
}
//The way to succeed
@Override
public void loginSuccess() {
Toast.makeText(this, "Landing successfully", Toast.LENGTH_SHORT).show();
startActivity(new Intent(this, GoodActivity.class));
}
//Failed methods
@Override
public void loginError(String error) {
Toast.makeText(this, "Login failed, please register", Toast.LENGTH_SHORT).show();
startActivity(new Intent(this, RegActivity.class));
}
//Get user name
@Override
public String getMobile() {
return edit_Name.getText().toString();
}
//Get password
@Override
public String getPassword() {
return edit_Pass.getText().toString();
}
//Login click event
@OnClick(R.id.btn_denglu)
public void onViewClicked() {
Presenter presenter = new Presenter();
presenter.LoginPresenter(new MyModel(presenter), this);
Log.d("aaa", "-----Landing successfully-----");
}
}
3, Write a network request class
public class HttpConfig {
public static String base_url = "http://120.27.23.105/";
// Show http://120.27.23.105/product/getproducts? Pscid = 39 & page = 1
public static String show_url="/product/getProducts";
}
4, Write a RetrofitUtils tool class
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;
}
}
5, Write a MyService interface in the model layer
public interface MyService {
//Sign in
@FormUrlEncoded
@POST("user/login")
Observable<UserBean> loginPost(@FieldMap Map<String,String> map);
//register
@FormUrlEncoded
@POST("user/reg")
Observable<RegBean> regPost(@FieldMap Map<String,String> map);
6, Write an IModel interface in the model layer
public interface IModel {
//Sign in
void login(Map<String, String> map);
//register
void reg(Map<String, String> map);
}
7, Write a MyModel in the model layer to implement the IModel interface
public class MyModel implements IModel {
private IPresenter iPresenter;
public MyModel(IPresenter iPresenter) {
this.iPresenter = iPresenter;
}
// ----------------------------Landing------------------------------
@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", "----Landing completed-----");
}
@Override
public void onError(Throwable e) {
Log.d("aaa", "----Failed landing-----" + e.getMessage());
}
@Override
public void onNext(UserBean userBean) {
Log.d("aaa", "----Login in progress-----");
if (userBean.getCode().equals("0")) {
iPresenter.getLogin(userBean);
} else {
iPresenter.getErrorData("Please register");
}
}
});
}
//-------------------------------------Registration-----------------------------------
@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", "----Completion of registration-----");
}
@Override
public void onError(Throwable e) {
Log.d("bbb", "----Failed registration-----" + e.getMessage());
iPresenter.getRegErrorData("login has failed");
}
@Override
public void onNext(RegBean regBean) {
//chuanru presenter
Log.d("bbb", "----Registration in progress-----");
if (regBean.getCode().equals("0")) {
iPresenter.getReg(regBean);
} else {
iPresenter.getRegErrorData("login has failed");
}
}
});
}
}
8, Write an IPresenter interface in the presenter layer
public interface IPresenter {
//----------------------Landing------------------------------------------
void LoginPresenter(IModel iModel, IMyView iMyView);
// Accept success
void getLogin(UserBean userBean);
//Accept tips for failure
void getErrorData(String string);
// --------------------Registration---------------------------------------------------
//register
void regPresenter(IModel iModel, IRegView iRegView);
//Accept registration success parameter
void getReg(RegBean regBean);
//Accept the prompt of registration failure
void getRegErrorData(String string);
}
9, Write a Presenter class in the Presenter layer to implement the IPresenter interface
public class Presenter implements IPresenter {
private IMyView iMyView;
private IRegView iRegView;
private GoodVIew goodVIew;
//---------------------Landing-----------------------------
@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);
}
//Landing successfully
@Override
public void getLogin(UserBean userBean) {
iMyView.loginSuccess();
}
//Landing failed
@Override
public void getErrorData(String string) {
iMyView.loginError(string);
}
//-------------------------Registration-------------------------------
@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);
}
}
1, Register interface
Write an interface IRegView in the model layer
/**
* Register interface
*/
public interface IRegView {
//register
// Success
void register();
//fail
void regError(String error);
//Registered name
String getMobile();
//Get registered password
String getPassword();
}
2, Write a RegActivity class in the model layer to implement the IRegView interface
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);
}
//Registration button
@OnClick(R.id.reg_btn_denglu)
public void onViewClicked() {
//Call p to log in
Presenter presenter = new Presenter();
presenter.regPresenter(new MyModel(presenter),this);
}
//login was successful
@Override
public void register() {
Log.d("bbb", "login was successful --- Please login");
Toast.makeText(this, "login was successful --- Please login", Toast.LENGTH_SHORT).show();
}
//login has failed
@Override
public void regError(String error) {
Toast.makeText(RegActivity.this, "--" + error, Toast.LENGTH_SHORT).show();
}
//Get the name
@Override
public String getMobile() {
return reg_EditName.getText().toString();
}
//Get password
@Override
public String getPassword() {
return reg_EditPass.getText().toString();
}
}