干货分享:如何用Retrofit直接获得Json数据(字符串)

本文介绍了在Android开发中,如何使用Retrofit框架获取原始的Json数据。在通常情况下,Retrofit会自动解析返回数据,但有时我们需要原始的ResponseBody。通过结合RxJava,可以利用ResponseBody来接收网络请求的原始数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值