一.登录注册mvp框架

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

猜你喜欢

转载自blog.csdn.net/shitou0/article/details/79834571