MVP+Retrotfit+RxJava+Fresco+banner

来源:互联网 发布:公务员网络课程 编辑:程序博客网 时间:2024/05/22 00:32

导入依赖

 /*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)

原创粉丝点击