MVP+Rxjava+Retrofit+Fresco网络请求数据

来源:互联网 发布:linux系统中文版下载 编辑:程序博客网 时间:2024/04/29 11:24

一次导入各个需要的依赖包

       compile 'com.squareup.retrofit2:retrofit:2.0.2'
        compile 'com.squareup.retrofit2:converter-gson:2.0.2'
        compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
        
        compile 'io.reactivex:rxjava:1.0.14'
        compile 'io.reactivex:rxandroid:1.0.1'
        
        // Okhttp库
        compile 'com.squareup.okhttp3:okhttp:3.1.2'

        compile 'com.facebook.fresco:fresco:0.11.0'

        compile 'com.android.support:recyclerview-v7:25.3.1'

首先创建APP类实现APPlication在内部设置Fresco.initialize(this);并且在manifests文件中设置APP及添加权限

 实体类非常简单在这里就不展示了(实体类名:UserBean)

接下来就是创建API类存放URL地址

 然后就是创建Service接口类拼接URL并创建Call方法

    @GET(“”)

        Call<bean> gata()

view接口层设置显示方法:

void  showrecy(UserBean bean);
model 接口层创建观察者方法:
void recy(rx.Observer<UserBean> bean);
model层实现model接口:\
//创建观察者、订阅者、被观察者
 Observable.create(new Observable.OnSubscribe<UserBean>() {    @Override    public void call(Subscriber<? super UserBean> subscriber) { //创建retrofit   Retrofit retrofit=new Retrofit.Builder()              .baseUrl(Api.URL)              .addCallAdapterFactory(RxJavaCallAdapterFactory.create())              .addConverterFactory(GsonConverterFactory.create())              .build();  //创建网络请求接口的实例 RecyService service=retrofit.create(RecyService.class);   //封装实体类 Call<UserBean> gata = service.gata();  //异步解析 gata.enqueue(new Callback<UserBean>() {            @Override            public void onResponse(Call<UserBean> call, Response<UserBean> response) {                UserBean body = response.body();                 //调用onnext方法传给观察者               bean.onNext(body);            }            @Override            public void onFailure(Call<UserBean> call, Throwable t) {            }        });    }  }).subscribeOn(Schedulers.newThread()).observeOn(AndroidSchedulers.mainThread()).subscribe(bean);
Presenter层     实现(Context、model、view)有参构造方法并创建实现view的方法      //有参构造方法      Context context;    RecyModel model;    IRecyView view;    public RecyPresenter(Context context, IRecyView view) {        this.context = context;        this.view = view;        model=new RecyModel();    }      //显示页面方法      public  void show(){        model.recyModel(new Observer<UserBean>() {            @Override            public void onCompleted() {}            @Override            public void onError(Throwable e) {}            @Override            public void onNext(UserBean bean) {view.recy(bean);}});}
接下来就是Adapter的编辑
   适配器只是为了能让以上的逻辑代码实现效果展示   首先就是创建需要的XML文件,再对其进行数据调用。
首先创建MyViewHolder内部类继承RecyclerView.ViewHolder,其内部就是获取XML布局的控件。
接着适配继承RecyclerView.Adapter<适配器名称.内部类名称>,会重写onCreateViewHolderonBindViewHoldergetItemCount三个方法;
   onCreateViewHolder获取XMl文件并实体化内部类对象。
   onBindViewHolder设置item条目的数据,其中Fresco必须设置URL对象,实现方法如下:
      AbstractDraweeController build = Fresco.newDraweeControllerBuilder()        .setUri(bean.getData().getDefaultGoodsList().get(position).getGoods_img())        .setAutoPlayAnimations(true)        .build();
    holder.img.setController(build);   getItemCount就是获取试题类的总长度。
最后就是MainActivity类是编写
    首先在onCreate中new一个Presenter类并实现presenter中的方法    获取控件设置展示格式
      presenter = new Presenter(this,this);      presenter.show();      rl = findViewById(R.id.rlv);      rl.setLayoutManager(new LinearLayoutManager(this))
接着实现view层,得到一个重写方法,在其内部实例化适配器对象
      @Override      public void showrecy(UserBean bean) {          final MyAdapter myAdapter = new MyAdapter(this, bean);             runOnUiThread(new Runnable() {                @Override                 public void run() {                  rl.setAdapter(myAdapter);               }           });  到这里完整的效果就会展示出来了。


原创粉丝点击