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