从Google推出官方MVP架构demo到现在大概有一年多的时间了,半年前大概在所有的Android技术社区都有提到MVP架构,现在关于MVP架构的话题似乎没有以前那么多了,可能是因为大家都已经能够熟练的使用MVP了。在这里先炒碗闲饭,提供了一个快速生成MVP模式的插件。地址
定义接口
API
public static final String INSERT="http://120.27.23.105/product/";ApiService
//创建订单 @POST Observable<Order> insertorder(@Url String url , @QueryMap Map<String , String> map);bean类(自动生成和map需要传的值)
自动生成
public class Order { /** * msg : 天呢!有钱人,总价不正确! * code : 1 */ private String msg; private String code; public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } }
//map需要传的值 public class Insert { private String uid; private String price; public Insert(String uid, String price) { this.uid = uid; this.price = price; } public String getUid() { return uid; } public void setUid(String uid) { this.uid = uid; } public String getPrice() { return price; } public void setPrice(String price) { this.price = price; } }model层(Imodel和model类)
public interface Omodel { void insertorder(String url, Insert insert); }
public class OrderModel implements Omodel { private OnInsert onInsert ; public interface OnInsert{ void OnInsertListener(String code); } public void setOnInsert (OnInsert onInsert ){ this.onInsert = onInsert; } @Override public void insertorder(String url, Insert insert) { Map map = new HashMap<>() ; map.put("uid" , insert.getUid()); map.put("price" , insert.getPrice()); Retrofit retrofit = new Retrofit.Builder(). baseUrl(url).addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()).build(); ApiServer apiServer = retrofit.create(ApiServer.class); Observable<Order> insertorder = apiServer.insertorder("createOrder", map); insertorder.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<Order>() { @Override public void onCompleted() { Log.d("123" , "onCompleted"); } @Override public void onError(Throwable e) { Log.d("123" , "onError"); e.printStackTrace(); } @Override public void onNext(Order order) { Log.d("123" , "onNext"); String code = order.getCode(); onInsert.OnInsertListener(code); } }); } }presenter层
public class Opresenter implements OrderModel.OnInsert { private final Oview oview; private final OrderModel orderModel ; public Opresenter(Oview oview) { this.oview = oview; this.orderModel = new OrderModel() ; } public void insert(String url , Insert insert){ orderModel.setOnInsert(this); orderModel.insertorder(url , insert); } @Override public void OnInsertListener(String code) { SharePresenters.put("insert" , code); if (code.equals("0")){ oview.insertSuccess(); }else{ oview.insertFailed(); } } }view层
public interface Oview {
//如果需要在页面获取值,需要在这里进行定义比如:
//String name(); //String pass();//创建成功 void insertSuccess() ; //创建失败 void insertFailed() ;} 主类继承view层
public class OrderActivity extends AppCompatActivity implements Oview{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_order); int uid = (int) SharePresenters.get("uid", 0); String price = (String) SharePresenters.get("price", "0"); Log.d("OrderActivity" , uid + price); Opresenter opresenter = new Opresenter(this) ; opresenter.insert(Api.INSERT,new Insert(uid+"" , price)); } @Override public void insertSuccess() { Toasts.show(this , "添加订单成功!" , Toast.LENGTH_SHORT); } @Override public void insertFailed() { Toasts.show(this , "添加订单失败!" , Toast.LENGTH_SHORT); } }