MVP+Retrotfit+RxJava+Fresco+banner

本文介绍如何使用Retrofit进行网络请求及Fresco进行图片加载,并通过实例展示了具体实现过程,包括依赖导入、Bean类封装、图片加载器的自定义等。

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

导入依赖

 /*retrofit依赖*/
    compile 'com.squareup.retrofit2:retrofit:2.0.2'
    compile 'com.squareup.okhttp3:okhttp:3.1.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'
    /*fresco依赖*/
    compile 'com.facebook.fresco:fresco:0.11.0'
    compile 'com.youth.banner:banner:1.4.9'

初始化Fresco

public class Myapp extends Application{
    @Override
    public void onCreate() {
        super.onCreate();
        Fresco.initialize(this);
    }
}

清单文件

 <!--网络权限-->
<uses-permission android:name="android.permission.INTERNET">
</uses-permission>
<!--注册图片,application里-->
 android:name=".app.Myapp"

布局activity_main

<com.youth.banner.Banner
       android:id="@+id/bn"
       android:layout_width="match_parent"
       android:layout_height="200dp">

   </com.youth.banner.Banner>

封装Bean类

http://api.svipmovie.com/front/homePageApi/homePage.do
最好一键封装

BnUri

public interface BnUri {
    /*注解,Get请求,接口后半部分,请求头在model里*/
    @GET("homePageApi/homePage.do")
    /*import retrofit2.Call;*/
    Call<BnBean> getBnCall();
}

IBnModel

public interface IBnModel {
    public void getData(Observer<BnBean> observer);
}

BnModel

public class BnModel implements IBnModel{
    private BnBean bnBean;
    @Override
    public void getData(Observer<BnBean> observer) {
        Observable.create(new Observable.OnSubscribe<BnBean>(){

            @Override
            public void call(final Subscriber<? super BnBean> subscriber) {
                Retrofit retrofit = new Retrofit.Builder()
                        .baseUrl("http://api.svipmovie.com/front/")
                        .addConverterFactory(GsonConverterFactory.create())
                        .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                        .build()
                        ;
                /*gaigaigai*/
                BnUri bnUri = retrofit.create(BnUri.class);
                Call<BnBean> call=bnUri.getBnCall();
                call.enqueue(new Callback<BnBean>() {
                   @Override
                   public void onResponse(Call<BnBean> call, Response<BnBean> response) {
                       bnBean=response.body();
                       subscriber.onNext(bnBean);
                       subscriber.onCompleted();
                   }

                   @Override
                   public void onFailure(Call<BnBean> call, Throwable t) {

                   }
               });
            }
        }).subscribeOn(Schedulers.newThread()).observeOn(AndroidSchedulers.mainThread()).subscribe(observer);
    }
}

IMainActivity

public interface IMainActivity {
    public void showBnView(List<BnBean.RetBean.ListBean.ChildListBean> bnlist);
}

MainActivity

public class MainActivity extends AppCompatActivity implements IMainActivity {
    private Banner mBn;
    private List<BnBean.RetBean.ListBean.ChildListBean> bnlist;
    private PersenterActivity persenterActivity;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        persenterActivity = new PersenterActivity(this);
        persenterActivity.getData();

        bnlist = new ArrayList<>();
        showBnView(bnlist);
    }

    private void initView() {
        mBn = (Banner) findViewById(R.id.bn);
    }

    @Override
    public void showBnView(List<BnBean.RetBean.ListBean.ChildListBean> bnlist) {
      /*重点*/
        ArrayList<String> pic = new ArrayList<>();
        for (int i = 0; i < bnlist.size(); i++) {
            pic.add(bnlist.get(i).getPic());
        }
        mBn.setImages(pic);
        mBn.setImageLoader(new GlideImageLoader());
        mBn.start();
    }
}

PersenterActivity

public class PersenterActivity {
    BnModel bnModel;
    IMainActivity iMainActivity;
    List<BnBean.RetBean.ListBean.ChildListBean> bnlist = new ArrayList<>();

    public PersenterActivity(IMainActivity iMainActivity) {
        this.iMainActivity = iMainActivity;
        this.bnModel = new BnModel();
    }
    public void getData(){
        bnModel.getData(new Observer<BnBean>() {
            @Override
            public void onCompleted() {
               /* Log.i("1111111", "onCompleted()");*/
            }

            @Override
            public void onError(Throwable e) {
               Log.i("111111", "onError()"+e.toString());
            }

            @Override
            public void onNext(BnBean bnBean) {
             /*   Log.i("111111", "onNext()");*/
                bnlist.addAll(bnBean.getRet().getList().get(0).getChildList());
                iMainActivity.showBnView(bnlist);
                Log.i("111111", "onNext()" + bnlist);
            }
        });
    }
}

图片加载器

public class GlideImageLoader extends ImageLoader{
    @Override
    public void displayImage(Context context, Object path, ImageView imageView) {
        /**
         注意:
         1.图片加载器由自己选择,这里不限制,只是提供几种使用方法
         2.返回的图片路径为Object类型,由于不能确定你到底使用的那种图片加载器,
         传输的到的是什么格式,那么这种就使用Object接收和返回,你只需要强转成你传输的类型就行,
         切记不要胡乱强转!
         */

        //用fresco加载图片简单用法,记得要写下面的createImageView方法
        Uri uri = Uri.parse((String) path);
        imageView.setImageURI(uri);
    }

    //提供createImageView 方法,如果不用可以不重写这个方法,主要是方便自定义ImageView的创建
    @Override
    public ImageView createImageView(Context context) {
        //使用fresco,需要创建它提供的ImageView,当然你也可以用自己自定义的具有图片加载功能的ImageView
        SimpleDraweeView simpleDraweeView=new SimpleDraweeView(context);
        return simpleDraweeView;
    }
    }

其实可以直接导入第三方工具类(Myapp,GlideImageLoader ,RetrofitManager)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值