第一次接触MVP,有很多不足的地方,这里是记录自己的思路,不足以作为参考。
这里做的是用mvp请求数据
在Api类中声明请求的地址:
public class Api { //查询购物车 public static final String Cart_API = "http://120.27.23.105/product/getCarts?uid="; } 创建model,view,persenter包
UserModel 类中,自己创建方法:
//自己定义的方法 public void getUsetData(int uid){ OkHttpClient client = new OkHttpClient(); FormBody.Builder builder = new FormBody.Builder(); FormBody build = builder.build(); Request request = new Request.Builder().url(Api.Cart_API+uid).post(build).build(); client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { onUser.onFaliure(call,e); } @Override public void onResponse(Call call, Response response) throws IOException { if(response != null && response.isSuccessful()){ final String result; try { result = response.body().string(); System.out.println("result = " + result); Gson gson = new Gson(); Bean bean = gson.fromJson(result, Bean.class); String code = bean.getCode(); //失败的 String msg = bean.getMsg(); //成功的 List<Bean.DataBean> data = bean.getData(); if(code.equals("0")){ onUser.getUserSuccess(data); }else if(code.equals("1")){ onUser.getUserFaliure(msg); } }catch (Exception e){ } } } }); }声明一个接口,Alt+Insert,创建set方法
private onUser onUser; public void setOnUser(UserModel.onUser onUser) { this.onUser = onUser; } public interface onUser{ //成功,data void getUserSuccess( List<Bean.DataBean> data); //失败,吐司事件 void getUserFaliure(String msg); //彻底失败 void onFaliure(Call call, IOException e); }
UserView接口
将onUser接口中的三个方法复制
public interface UserView { //成功,data void getUserSuccess( List<Bean.DataBean> data); //失败,吐司事件 void getUserFaliure(String msg); //彻底失败 void onFaliure(Call call, IOException e); }
UserPresenter 类
声明Context,View,Model
private UserModel userModel; private Context context; private UserView userView; public UserPresenter(Context context, UserView userView) { this.context = context; this.userView = userView; userModel = new UserModel(); userModel.setOnUser(this);//这里写的是Model类中的set方法 }注意!!!!
UserModel是实例化出来的,需要单独拎出来 this会报错,implements UserModel.onUser
//自己定义的方法 public void requestUser(int uid){ userModel.getUsetData(uid); } @Override public void getUserSuccess(List<Bean.DataBean> data) { userView.getUserSuccess(data); } @Override public void getUserFaliure(String msg) { userView.getUserFaliure(msg); } @Override public void onFaliure(Call call, IOException e) { userView.onFaliure(call,e); }
接下来是MainActivity类中的,来实例化Presenter
146是我传递过去的uid
UserPresenter presenter = new UserPresenter(MainActivity.this,this); presenter.requestUser(146);
会报错,Alt+Enter来重写三个方法
主要是在成功后的方法里面写逻辑
@Override public void getUserSuccess( List<Bean.DataBean> data) { 如果用的是RecyclerView来实现,那么就传递data; data是请求成功后的list集合 }