本文主要让大家知道RxJava2+Retrofit 2获取网络数据简单方法,如果有不了解RxJava和Retrofit请先去学习了在来阅读。

我将以下面的图片作为栗子为大家展现RxJava2+Retrofit 2简单获取网络数据

一、添加依赖
  // RxJava2.0    implementation 'io.reactivex.rxjava2:rxjava:2.0.1'    implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'    // Retrofit    implementation 'com.squareup.retrofit2:retrofit:2.3.0'    implementation 'com.google.code.gson:gson:2.2.4'    implementation 'com.squareup.retrofit2:converter-gson:2.3.0'// retrofit+gson    implementation 'com.squareup.retrofit2:adapter-rxjava2:2.3.0' // Rxjava与Retrofit结合使用必须添加这个依赖    compile 'com.github.bumptech.glide:glide:4.6.1'    annotationProcessor 'com.github.bumptech.glide:compiler:4.6.1'    //banner    implementation 'com.youth.banner:banner:1.4.10' 
二、创建依赖接口(创建观察者)和Bean
public class OneBean {    private List data;    public List getData() {        return data;    }    public void setData(List data) {        this.data = data;    }    public static class DataBean {        private String desc;        private int id;        private String imagePath;        private int isVisible;        private int order;        private String title;        private int type;        private String url;        public String getDesc() {            return desc;        }        public void setDesc(String desc) {            this.desc = desc;        }        public int getId() {            return id;        }        public void setId(int id) {            this.id = id;        }        public String getImagePath() {            return imagePath;        }        public void setImagePath(String imagePath) {            this.imagePath = imagePath;        }        public int getIsVisible() {            return isVisible;        }        public void setIsVisible(int isVisible) {            this.isVisible = isVisible;        }        public int getOrder() {            return order;        }        public void setOrder(int order) {            this.order = order;        }        public String getTitle() {            return title;        }        public void setTitle(String title) {            this.title = title;        }        public int getType() {            return type;        }        public void setType(int type) {            this.type = type;        }        public String getUrl() {            return url;        }        public void setUrl(String url) {            this.url = url;        }    }}
public interface Api {    //1.创建观察者    @GET("banner/json")    Observable getBannerRequest();
三、创建Retrofit
  Retrofit retrofit = new Retrofit.Builder()                .baseUrl(url)                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())//创建Retrofit和RxJava关联                .addConverterFactory(GsonConverterFactory.create())//创建Gson解析                .build();
四、创建动态代理
Api api = retrofit.create(Api.class);
五、关联订阅
 api.getBannerRequest().subscribeOn(Schedulers.io())//订阅事件触发IO        .observeOn(AndroidSchedulers.mainThread())//在主线程处理返回事件        .subscribe(new Observer() {//订阅            @Override            public void onSubscribe(Disposable d) {                //取消订阅                Log.e(TAG,"----------onSubscribe");            }            @Override            public void onNext(OneBean value) {                list.addAll(value.getData());                //向下执行                Log.e(TAG,"----------onNext"+value.toString());            }            @Override            public void onError(Throwable e) {                //抛异常触发                Log.e(TAG,"----------onError");            }            @Override            public void onComplete() {            //设置banner                for (OneBean.DataBean imgUrl:list) {                    imgViewUrl.add(imgUrl.getImagePath());                    titles.add(imgUrl.getTitle());                }                //设置图片加载器                banner.setImageLoader(new GlideImageLoader());                //设置banner样式                banner.setBannerStyle(BannerConfig.NUM_INDICATOR_TITLE);                //设置banner动画效果                banner.setBannerAnimation(Transformer.DepthPage);                //设置标题集合(当banner样式有显示title时)                banner.setBannerTitles(titles);                //设置图片集合                banner.setImages(imgViewUrl);                //设置自动轮播,默认为true                banner.isAutoPlay(true);                //设置轮播时间                banner.setDelayTime(1500);//                //设置指示器位置(当banner模式中有指示器时)//                    banner.setIndicatorGravity(BannerConfig.CENTER);                //banner设置方法全部调用完毕时最后调用                banner.start();                //完成时                Log.e(TAG,"----------onComplete");            }        });
六、RxJava2+Retrofit 2简单封装
public class RequestManager  {    public  Retrofit mRetrofit ;    public RequestApi requestApi;//    private Context mContext;    public RequestManager() {        mRetrofit = createRetrofit();        requestApi = networkApi(RequestApi.class);//        this.mContext = mContext;    }    //1.创建匿名内部内单利    public static class RequestManagerHolder{        public static RequestManager instance = new RequestManager();    }    public static RequestManager getInstance() {        return RequestManagerHolder.instance;    }    //动态代理    public  T networkApi(Class api){        return mRetrofit.create(api);    }    //2.创建Retrofit网络请求    private Retrofit createRetrofit() {        return new Retrofit.Builder().baseUrl(Constant.BASE_URL)                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())//关联RxJava2                .addConverterFactory(GsonConverterFactory.create())//创建Gson解析                .client(HttpClient())                .build();    }    /**     * 每次请求都会走拦截器,即:可以动态修改header     */    private OkHttpClient HttpClient() {        OkHttpClient.Builder builder = new OkHttpClient.Builder();        if (Constant.LOG_TYPE) {            // OkHttp日志拦截器            builder.addInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY));        }//        builder.addInterceptor(chain -> {//            Request original = chain.request();//            Request request = original.newBuilder()//                    // 设置请求头//                    .header("XX-Token", SPUtils.getInstance().getString("token", ""))//                    .header("XX-Device-Type", "android")//                    .method(original.method(), original.body())//                    .build();//            return chain.proceed(request);//        });        return builder.build();    }}

增加依赖

  implementation 'com.squareup.okhttp3:okhttp:3.9.0'  implementation 'com.squareup.okhttp3:logging-interceptor:3.9.0'
小结:

发现Retrofit搭配RxJava之后,绝对是最好用的网络请求库,如有问题,欢迎留言指正

更多相关文章

  1. android手机修改系统分变率/修改机型/系统属性等信息
  2. listview 设置数组为空
  3. Android(安卓)原生通知Notification 写法
  4. [Android(安卓)机制] 使用Ksoap2访问webservie,设置timeout时间
  5. 彻底理解Android中的Context
  6. android ActionBar介绍
  7. android.view.WindowLeaked的解决方法
  8. Android(安卓)将Activity设为Dialog样式,并铺满全屏
  9. fragment和radiobutton做出类tabhost效果

随机推荐

  1. Android开发之单行文本自动播放效果
  2. 【Android】Vibrator手机震动
  3. 怎样将Activity设置成窗口模式
  4. android 在Service中启动Activity
  5. cocos打包android遇到的那些坑
  6. Android(安卓)SearchView
  7. android 开机自启动的几种方法,监听不到RE
  8. Android(安卓)使用AIDL调用外部服务 (转)
  9. Android(安卓)之 自定义控件 之 ViewGrou
  10. Android(安卓)文字绘制,多行文字绘制