Retrofit2+RxJava2

一、Retrofit2

     使用的时候怎么选择框架,可以参考下  网络框架选择   引用别人的话:

  • OkHttp  
功能:高性能Http请求库,可把它理解成是一个封装之后的类似HttpUrlConnection的一个东西,属于同级并不是基于二者;
   性能:基于NIO和Okio,所以性能比较好,请求处理速度快(IO:阻塞式;NIO:非阻塞式;Okio是Square公司基于IO和NIO做的一个更简单、高效处理数据流的一个库);
   应用场景:重量级网络交互场景,网络请求频繁、传输数据量大(当然更推荐Retrofit,反正Retrofit是基于Okhttp的);
  • Volley   
点击打开链接
功能:基于HttpUrlConnection,封装了URL图片加载框架,支持图片加载,Activity和生命周期可以联动;
   性能:可扩展性好,可支持HttpClient、HttpUrlConnection和Okhttp;
   应用场景:适合轻量级网络交互,网络请求频繁,传输数据量小,不适合大数据的网络操作(比如下载视频、音频),所以不适合用来上传文件;
  • Retrofit
功能:基于Okhttp,restful Api设计风格,可通过注解配置请求包括请求方法,请求参数,请求头返回值等等,可以搭配多种Converter将获得的数据解析&序列化,提供对RxJava的支持;
   性能:性能最好处理最快,因为是基于Okhttp封装所以扩展性差,这其实是高度封装所带来的后果;
   应用场景:可以优先选择,特别是后台Api遵循restful的风格&项目中有使用RxJava;    


二、Retrofit2+RxJava2


 上面提到Retrofit2提供RxJava2的支持,我们通过demo来学习下Retrofit2+RxJava2的使用。


首先定义一个Restful api风格的java接口

public interface MyInterface {

    @GET("api/china")
//    Call<List<ProvinceBean>> load();
    Observable<List<ProvinceBean>> load();
}


同时还要新建一个我们获取数据映射的bean类

public class ProvinceBean {
//  为了简单,先这样写,没有对数据封装
    public int id;
    public String name;
}

接着就要实例化Retrofit,绑定地址,并配置属性,

public class MainActivity extends AppCompatActivity {


    List<ProvinceBean> list=new ArrayList<>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://guolin.tech/")
                .addConverterFactory(GsonConverterFactory.create())  //将json数据通过GSON和Bean类映射
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) //通过此此方法,提供和RxJava结合使用
//                .client(new OkHttpClient())
                .build();
        MyInterface myInterface = retrofit.create(MyInterface.class);


//        RxJava2
        Observable<List<ProvinceBean>> observable = myInterface.load();
        observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<List<ProvinceBean>>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(List<ProvinceBean> value) {
                        list=value;
                        Log.d("------->", list.size() + "");

                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onComplete() {

                    }
                });
//        Call
      /*  Call<List<ProvinceBean>> call=myInterface.load();
        try {
//            同步
//            call.execute();
//            异步
            call.enqueue(new Callback<List<ProvinceBean>>() {
                @Override
                public void onResponse(Call<List<ProvinceBean>> call, Response<List<ProvinceBean>> response) {
                    list=response.body();
                    Log.d("------->",list.size()+"");
                }

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

                }
            });
        } catch (Exception e) {
            e.printStackTrace();
        }
    }*/

    }

}


一个学习的例子








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值