Android 单例模式封装 RxJava+Retrofit 网络请求

来源:互联网 发布:网络语言 英文 编辑:程序博客网 时间:2024/05/17 21:54

之前用单例模式总结过RxJava+Okhttp封装

其实Retrofit和Rx的结合更加契合,直接总结代码,代码里会有注释解释

首先引入依赖

compile 'com.squareup.retrofit2:retrofit:2.2.0'    compile 'com.squareup.retrofit2:converter-gson:2.2.0'    compile 'com.squareup.retrofit2:adapter-rxjava2:2.2.0'    compile 'io.reactivex.rxjava2:rxandroid:2.0.1'


首先是定义一个Retrofit的请求接口,方法返回值为Observable 泛型中的类为该方法请求后要解析成的实体类

public interface Api {    @GET("{num}/{page}")    Observable<PictureBean> requestPic(@Path("num") int num, @Path("page") int page);}

只定义了一个Get请求,Post请求修改注解即可 下面的链接感觉讲的比较仔细 收藏一下

【Android】Retrofit网络请求参数注解,@Path、@Query、@QueryMap...


下面是NetToll单例封装初始化

public class NetTool {    public static NetTool instance;    private Retrofit retrofit;    private final Api api;    public Api getApi() {        return api;    }    private NetTool() {        //初始化Retrofit        retrofit = new Retrofit.Builder().baseUrl("http://gank.io/api/data/%E7%A6%8F%E5%88%A9/")                //给Retrofit添加Gson解析功能                .addConverterFactory(GsonConverterFactory.create())                //给Retrofit添加Rxjava功能                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())                .build();        //初始化Retrofit的Api接口        api = retrofit.create(Api.class);    }    //线程锁单例    public static NetTool getInstance() {        if (instance == null) {            synchronized (NetTool.class) {                if (instance == null) {                    instance = new NetTool();                }            }        }        return instance;    }}


最后是在Activity中调用

        NetTool.getInstance().getApi()                //填入方法中占位的请求参数                .requestPic(50,1)                //切换线程                .subscribeOn(Schedulers.io())                .observeOn(AndroidSchedulers.mainThread())                .subscribe(new Consumer<PictureBean>() {                    @Override                    public void accept(PictureBean pictureBean) throws Exception {                        //请求成功并获取PictureBean解析成功                    }                }, new Consumer<Throwable>() {                    @Override                    public void accept(Throwable throwable) throws Exception {                        //异常捕获                    }                });



阅读全文
0 0