1, Login to register mvp framework

Keywords: Retrofit ButterKnife Mobile network

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

Posted by monotoko on Sun, 05 Apr 2020 16:28:07 -0700