美文网首页
如何用Retrofit直接获得Json数据(字符串)

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

作者: 智障桃与呆杏 | 来源:发表于2016-09-09 16:47 被阅读0次

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

相关文章

网友评论

      本文标题:如何用Retrofit直接获得Json数据(字符串)

      本文链接:https://www.haomeiwen.com/subject/hkneettx.html