10.1 使用MVP实现登录功能

1.准备工作

网络权限
依赖
mvp结构
请求地址及参数2

    String baseUrl="https://www.wanandroid.com/";

    @FormUrlEncoded
    @POST("user/login")
    Observable<ResponseBody>  getLoginData(@Field("username")String name,@Field("password")String password);

    //retrofit+rxjava
    implementation 'com.squareup.retrofit2:retrofit:2.5.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.3.0'//转换器,请求结果转换成Model
    implementation 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'//配合Rxjava 使用
    implementation 'io.reactivex.rxjava2:rxjava:2.0.1'
    implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'

2.View–>Presenter

实现主界面调用P

public class MainActivity extends AppCompatActivity implements View.OnClickListener, ILoginView {

    private Button mClick1;
    private TextView mResult;
    private LoginPresenter loginPresenter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        initPresenter();
    }

    private void initPresenter() {
        loginPresenter = new LoginPresenter(this);
    }

    private void initView() {
        mClick1 = (Button) findViewById(R.id.click1);
        mClick1.setOnClickListener(this);
        mResult = (TextView) findViewById(R.id.result);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.click1:
                String userName ="h1907a";
                String pass ="12346";
                loginPresenter.getLoginData(userName,pass);
                break;
            default:
                break;
        }
    }
    @Override
    public void updateUISuccess(String result) {

        mResult.setText(result);
    }
    @Override
    public void updateUIFailed(String msg) {
        mResult.setText(msg);
    }
}

3.Presenter–>Model

public class LoginPresenter implements ILoginPresenter {

    ILoginModel iLoginModel;
    ILoginView iLoginView;
    public LoginPresenter( ILoginView iLoginView) {
        iLoginModel = new LoginModel();
        this.iLoginView = iLoginView;
    }


    /**
     * 调用Model 层,去真正得做功
     * @param userName
     * @param pass
     */
    @Override
    public void getLoginData(String userName ,String pass) {
        iLoginModel.getData(userName, pass,callBack);
    }

    CallBack callBack=  new CallBack() {
        @Override
        public void success(String msg) {

            iLoginView.updateUISuccess(msg);
        }

        @Override
        public void failed(String errorMsg) {

            iLoginView.updateUIFailed(errorMsg);
        }
    };
}

4.Presenter<–Model

public class LoginModel implements ILoginModel {
    /**
     * 获取登录得数据
     * @param username
     * @param pass
     * @return
     */
    @Override
    public void getData(String username, String pass, final CallBack callBack) {

        Retrofit retrofit = new Retrofit.Builder().baseUrl(LoginService.baseUrl)
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        Observable<ResponseBody> observable = retrofit.create(LoginService.class).getLoginData(username, pass);

        observable.subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<ResponseBody>() {
                        @Override
                        public void onSubscribe(Disposable d) {

                        }

                    @Override
                    public void onNext(ResponseBody value) {
                        // 成功
                        try {
                            String result = value.string();
                            JSONObject jsonObject = new JSONObject(result);
                            int code = jsonObject.getInt("errorCode");

                            if (code==0){
                                // TODO  成功
                                String data = jsonObject.getJSONObject("data").toString();
                                callBack.success(data);
                            }else{

                                // TODO 失败
                                String data = jsonObject.getString("errorMsg");

                                callBack.failed(data);

                            }


                        } catch (IOException | JSONException e) {
                            e.printStackTrace();
                        }

                    }

                    @Override
                    public void onError(Throwable e) {
                        // TODO 失败
                        String errMsg = e.getMessage();
                        callBack.failed(errMsg);

                    }

                    @Override
                    public void onComplete() {

                    }
                });


    }
}

5.View<–Presenter

    /**
     * 调用Model 层,去真正得做功
     * @param userName
     * @param pass
     */
    @Override
    public void getLoginData(String userName ,String pass) {
        iLoginModel.getData(userName, pass,callBack);
    }

    CallBack callBack=  new CallBack() {
        @Override
        public void success(String msg) {

            iLoginView.updateUISuccess(msg);
        }

        @Override
        public void failed(String errorMsg) {

            iLoginView.updateUIFailed(errorMsg);
        }
    };
发布了121 篇原创文章 · 获赞 16 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/chentaishan/article/details/105266823