如何用Retrofit直接获得Json数据(字符串)

最近由于想对项目进行一些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。具体情况看了源码再来继续。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容