一.登錄註冊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();
    }
}
發佈了99 篇原創文章 · 獲贊 15 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章