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