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

本文介绍如何使用Retrofit结合RxJava进行网络请求,并通过示例代码展示具体实现过程,包括依赖配置、实体类定义、接口声明及Presenter、Model、View等各层的职责划分。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

       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);
               }
           });
  到这里完整的效果就会展示出来了。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值