最近由于想对项目进行一些RxJava的重构,顺带看了一下RxJava与Retrofit的结合,才知道了Retrofit这个网络框架(泪奔)。
对于Retrofit的使用以及结合这里就不赘述了,主要是发现Retrofit对于数据的返回都是直接做了解析,但有些时候,我们需要原始的返回数据,或者原始的json,这个时候该怎么办?(一个大写的懵逼)
幸好,在尝试过程中,报了一个Exception,问是否是想获取 ResponseBody?于是,查到 OkHttp内有 ResponseBody 这个类,具体如下(这里使用的是RxJava与Retrofit结合 文章里的例子)
网络请求接口
@GET("top250")
Observable<ResponseBody> getTopMovie(@Query("start") int start, @Query("count") int count);
请求以及返回
private void loadData() {
String baseUrl = "https://api.douban.com/v2/movie/";
Retrofit retrofit = new Retrofit.Builder().baseUrl(baseUrl).addCallAdapterFactory(RxJavaCallAdapterFactory.create()).addConverterFactory(GsonConverterFactory.create()).build();
TestRetrofitService service = retrofit.create(TestRetrofitService.class);
service.getTopMovie(0,10).observeOn(AndroidSchedulers.mainThread()).subscribeOn(Schedulers.io()).subscribe(new Subscriber<ResponseBody>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(ResponseBody responseBody) {
try {
Log.d("retrofit", responseBody.string());
} catch (IOException e) {
e.printStackTrace();
}
}
});}
由上可见,Retrofit可以由ResponseBody来承载数据,具体源码还没时间来看,猜测本身通过OkHttp访问返回的就是ResponseBody。具体情况看了源码再来继续。