首先导依赖
compile 'io.reactivex:rxjava:1.0.14' compile 'io.reactivex:rxandroid:1.0.1'
compile 'com.squareup.retrofit2:retrofit:2.0.2' compile 'com.squareup.retrofit2:converter-gson:2.0.2' compile 'com.squareup.retrofit2:adapter-rxjava:2.0.2'
compile 'com.android.support:recyclerview-v7:26.0.0-alpha1'
compile 'com.facebook.fresco:fresco:1.3.0' // 支持webp compile 'com.facebook.fresco:webpsupport:1.3.0' // gif加载使用 compile 'com.facebook.fresco:animated-gif:1.3.0' // WebP(静态图+动图)加载使用 compile 'com.facebook.fresco:animated-webp:1.3.0'
view包里
IMainView类
public interface IMainView { //展示数据 void showGoods(List<GoodsBean.DataBean> list); //错误的时候提示 void showError(String error); }
MainActivity类
public class MainActivity extends AppCompatActivity implements IMainView{ private static final String TAG = "MainActivity======"; private RecyclerView recycler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Fresco.initialize(this); setContentView(R.layout.activity_main); recycler = findViewById(R.id.recycle); //调用P层 GoodsPresenter goodsPresenter = new GoodsPresenter(); goodsPresenter.showGoodsToView(new GoodModel(goodsPresenter),this); } @Override public void showGoods(List<GoodsBean.DataBean> list) { MyAdapter myAdapter=new MyAdapter(MainActivity.this,list); recycler.setAdapter(myAdapter); recycler.setLayoutManager(new GridLayoutManager(MainActivity.this,2)); } @Override public void showError(String error) { Log.d(TAG, "---错误---"+error); } }
MyAdapter类这里就不举例子了
Model包
IModel接口
public interface IModel { //获取数据 void getGoodsFromNet(Map<String,Integer> map); }
IModel的实现类ModelImpl类
public class GoodModel implements IModel { private IPresenter iPresenter; public GoodModel(IPresenter iPresenter) { this.iPresenter = iPresenter; } @Override public void getGoodsFromNet(Map<String,Integer> map) { //网络请求 RetrofitUtil retrofitUtil = RetrofitUtil.getInstance(); MyServcie servcie = retrofitUtil.createRequest(MyServcie.class); Observable<GoodsBean> observable = servcie.getGoods(map); //执行 observable.subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<GoodsBean>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(GoodsBean goodsBean) { String code = goodsBean.getCode(); if (code.equals("0")){ iPresenter.getCanshu(goodsBean.getData()); } } }); } }Retrofit的接口服务类
public interface MyServcie { @GET("product/getProducts") Observable<GoodsBean> getGoods(@QueryMap Map<String,Integer> map); }
Presenter包
IPresenter接口类
public interface IPresenter { //把数据给view展示 void showGoodsToView(IModel iModel, IMainView iMainView); //接收从M层传上来的数据 void getCanshu(List<GoodsBean.DataBean> list); //接收异常 void getError(String error); }
PresenterImpl接口实现类
public class GoodsPresenter implements IPresenter { private IMainView iMainView; @Override public void showGoodsToView(IModel iModel, IMainView iMainView) { this.iMainView=iMainView; //model请求数据 Map<String,Integer> map=new HashMap<>(); map.put("pscid",1); iModel.getGoodsFromNet(map); } @Override public void getCanshu(List<GoodsBean.DataBean> list) { iMainView.showGoods(list); } @Override public void getError(String error) { iMainView.showError(error); }
http包
HttpUtil类
public class RetrofitUtil { //单例模式 private static RetrofitUtil retrofitUtil; private final Retrofit retrofit; public static RetrofitUtil getInstance(){ if (retrofitUtil==null){ retrofitUtil=new RetrofitUtil(); } return retrofitUtil; } //初始化Retrofit public RetrofitUtil(){ retrofit = new Retrofit.Builder() .baseUrl(HttpConfig.base_url) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .addConverterFactory(GsonConverterFactory.create(new Gson())) .build(); } //指定服务 public <T> T createRequest(Class<T> clz){ T t = retrofit.create(clz); return t; } }
httpconfig类
public class HttpConfig { // https://www.zhaoapi.cn/product/getProducts?pscid=1 public static String base_url="https://www.zhaoapi.cn/"; }