有关Rxjava和retrofit

来源:互联网 发布:八皇后问题递归c语言 编辑:程序博客网 时间:2024/05/17 21:58
先导包:compile 'io.reactivex.rxjava2:rxjava:2.1.0'    compile 'com.google.code.gson:gson:2.8.0'    compile 'io.reactivex.rxjava2:rxandroid:2.0.1'    compile 'com.squareup.retrofit2:retrofit:2.3.0'    compile 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'    compile 'com.squareup.retrofit2:converter-gson:2.3.0'    compile 'com.github.bumptech.glide:glide:4.0.0-RC0'    compile 'com.bigkoo:convenientbanner:2.0.5'//创建Bean类//创建Bean的观察者接口ApiBeanpublic interface ApiTom {    //http://news-at.zhihu.com/api/4/news/latest    //https://api.douban.com/v2/movie/top250?start=0&count=10    @GET("latest")    Observable<TomBean> getTomBean();//注意导包   // @GET("top250")   // Observable<TomBean> getTomBean(@Query("start") int start,@Query("count") int count);}//在MainActivity中:public class MainActivity extends AppCompatActivity {    private String url="http://news-at.zhihu.com/api/4/news/";    private ConvenientBanner convenientBannerb;    private List<TomBean.StoriesBean> list=new ArrayList<>();    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        convenientBannerb = (ConvenientBanner) findViewById(R.id.cb);        getTom();    }    private void getTom()    {        //请求框架        Retrofit retrofit=new Retrofit.Builder()                .baseUrl(url)                .addConverterFactory(GsonConverterFactory.create())//支持gson解析                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())                .build();        //动态代理    被观察者        ApiTom apiTom = retrofit.create(ApiTom.class);        apiTom.getTomBean()                .subscribeOn(Schedulers.io())  //设置事件触发在非主线程                .observeOn(AndroidSchedulers.mainThread())                .subscribe(new Observer<TomBean>() {                    @Override                    public void onSubscribe(@NonNull Disposable d) {                         //解除订阅  Disposable相当于Rxjava中的subscrib                    }                    @Override                    public void onNext(@NonNull TomBean tomBean) {                        list.addAll( tomBean.getStories());                    }                    @Override                    public void onError(@NonNull Throwable e) {                    }                    @Override                    public void onComplete() {                        convenientBannerb.setPages(new CBViewHolderCreator() {                            @Override                            public Object createHolder() {                                return new MyViewHolder();                            }                        },list)                        ;                    }                });    }    public class MyViewHolder implements Holder<TomBean.StoriesBean> {        private ImageView imageView;        @Override        public View createView(Context context) {            imageView = new ImageView(MainActivity.this);            imageView.setScaleType(ImageView.ScaleType.FIT_XY);            ViewGroup.LayoutParams params=new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,200);            imageView.setLayoutParams(params);            return imageView;        }        @Override        public void UpdateUI(Context context, int position, TomBean.StoriesBean data) {            Glide.with(MainActivity.this)                    .load(data.getImages().get(0)).into(imageView);        }    }    @Override    protected void onResume() {        super.onResume();        convenientBannerb.startTurning(3000);    }    @Override    protected void onPause() {        super.onPause();        convenientBannerb.stopTurning();    }}//在清单文件中加上联网权限//在布局中:创建ConvenientBanner的布局