首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如果记录器显示主体中的对象,为什么retrofit response.body()返回null?

如果记录器显示主体中的对象,但是retrofit response.body()返回null,可能有以下几个原因:

  1. 服务器返回的响应中可能没有包含有效的主体内容。这可能是因为服务器端出现了错误,或者请求的URL不正确。在这种情况下,需要检查服务器端的代码和日志,确保正确返回了期望的主体内容。
  2. 请求的接口定义可能与服务器端的实际返回数据结构不匹配。在使用Retrofit进行网络请求时,需要确保接口定义中的返回类型与服务器端返回的数据结构一致。如果不一致,Retrofit可能无法正确解析服务器返回的数据,导致response.body()返回null。需要检查接口定义和服务器返回数据的结构是否匹配。
  3. 可能存在网络连接问题或请求超时。在进行网络请求时,可能会遇到网络连接不稳定或请求超时的情况。这可能导致无法正确获取服务器返回的数据,从而导致response.body()返回null。可以尝试检查网络连接是否正常,或者增加请求超时时间来解决这个问题。

总结起来,如果记录器显示主体中的对象,但是retrofit response.body()返回null,需要检查服务器端的代码和日志,确保服务器返回了期望的主体内容;同时也需要检查接口定义和服务器返回数据的结构是否匹配;还需要检查网络连接是否正常以及请求超时设置是否合理。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

网络请求-Android篇(Okhttp和Retrofit)

它由Square Inc.开发,提供了一种简单高效方式来进行应用程序HTTP请求。...get方式又可以分为两种情况,分别是同步请求和异步请求;同步请求在进行请求时候,当前线程会阻塞住,直到得到服务器响应后,后面的代码才会执行;而异步请求不会阻塞当前线程,它采用了回调方式,请求是在另一个线程执行...().string()); } } }); }   2.Post方式:POST请求将参数放在请求主体,不会直接显示在URL...Retrofit基本用法如下:   1.添加依赖项:在您Android或Java项目中build.gradle文件添加Retrofit依赖项     implementation 'com.squareup.retrofit2...:在以上例子,服务器返回给我们结果要么是字符串形式,要么是输入流形式;那如果服务器给我们返回Json格式数据,并且我们要求程序将Json自动转换成对应javaBean呢,那么这时就可以用到转换器了

1.3K30

「2020 新手必备 」极速入门 Retrofit + OkHttp 网络框架到实战,这一篇就够了!

但细心观察发现,第一步 Retrofit 实例化过程,只要服务器不换代码几乎是不变,所以我们完全可以将它封装 而且大家有没有发现,如果单单使用 OkHttp 我们返回值是一个 Response...对象,我们还需要在其中提取相应 JSON 对象,进行类型转换,而在 Retrofit ,由于使用了数据解析器,所以这一大块代码都省略了 还有很多优点,这里就不唠叨了,我们直接开始学习使用之路吧!...2.8.6' 我们和服务器数据,都是以 JSON 形式交互,比如 Bing 每日壁纸接口 设置了这个数据解析器,就可以把返回信息自动封装为相应对象,明白了吧 具体这个对象怎么获得,大家可以联系后端...,他返回直接就是一个 Call 对象 发送请求 请求分两种 同步和异步 由于请求是耗时,假设我们发送同步请求 ,在请求就过返回之前,应用界面会进去阻塞状态 说白了就是会卡,甚至卡死。。。...+ response.body().getUser_head_img()); 具体就不说了,就是调用 call execute() 会返回一个值 这个值就是请求结果,大家直接用就是( 但是在这个只没返回

1.2K30
  • Retrofit实现带进度下载

    我一想,retrofit好像并没有给我们提供显示下载进度接口,哎呀,看来还是得自己个儿整整喽!接下来,我把自己实现Retrofit带进度下载文件流程分享给大家。...效果图 在demo我分别实现了视频和图片下载,并附带有下载进度显示,视频下载完成后运用exo播放器直接播放,图片只是用Glide简单展示了一下。好了,我们步入正题吧!...其中我们在下载进度回调返回进度百分比,在此可以将进度显示在控件上;在下载结束回调返回下载至本地文件路径,在此可直接对下载完成文件进行操作。如果你还有一些个性化需求,可以自行添加。...最后别忘记在finally关闭输入输出流! 到此,我Retrofit带进度下载文件核心代码已经介绍完毕了!有木有迫不及待想要用用试试呢!...给circle_progress设置进度,onFinish中将fl_circle_progress隐藏,并利用Glide将下载完成图片显示在iv_picture,iv_picture就是一个imageView

    1.1K20

    Retrofit--合理封装回调能让你项目高逼格

    Retrofit和Java领域ORM概念类似, ORM把结构化数据转换为Java对象,而Retrofit 把REST API返回数据转化为Java对象方便操作。同时还封装了网络代码调用。...看了一些资料后大致了解到,Retrofit 2.0利用注解形式将我们访问服务器URL以及参数封装成了java对象,而OKHttp依旧去执行网络请求。...(GsonConverterFactory.create())就可以了,但是得保证我们定义API接口时候Call里面的bean要和服务器返回接口一一对应,否则这个字段就会为null,甚至网络请求失败报错...我们都知道服务器返回结果一般都是下面这种格式: image.png 一定是有code状态码和返回信息,我之前用法和教程一样,说将服务器返回结果复制下来直接在AS上面利用GsonFormat...而OnResponse()回调也有可能网络请求失败,根据response.raw().code()去判断;然后你也可以根据异常出现状况去执行不同UI,例如: if(t instanceof SocketTimeoutException

    1.6K10

    Retrofit与动态代理

    隐藏委托类实现,保证委托类独立 实现代理与委托类之间解耦,不侵入委托类代码 动态代理背景 在使用静态代理过程,会产生如下问题: 大型项目的复杂度,如果代理过多的话,会导致维护成本很大,并且难以理解...Retrofit动态代理 在Retrofit,使用动态代理来对接口中注释进行解析,解析后完成OkHttp参数构建。...,创建Retrofit对象 String url = "https://api.github.com/"; Retrofit retrofit = new Retrofit.Builder()...create中会通过Proxy.newProxyInstance来为传入Service接口类创建一个代理对象,而当代理对象调用函数时,会调用动态代理invoke函数。...会通过调用loadServiceMethod函数,对Method注释进行解析,并且返回ServiceMethod对象,传入OkHttpCall,构建OkHttp请求。

    92210

    使用Retrofit打印请求日志,过滤改变服务器返回结果,直接获取String字符串直接获取字符串手动解析查看Retrofit请求网络日志自定义Interceptor实现过滤改变请求返回数据(可使用

    Retrofit框架越来越流行了,Retrofit是基于OKHTTP大家都知道,在之前的话,在Retrofit1.x时候,是必须要自己手动导入OKHTTP 和 OKio,因为Retrofit...Retrofit有一个优点,就是可以自动根据获取到数据转换成相对应Bean,它内部提供了一个转换机制,只需要你重写,就能写出自己转换规则。...:converter-scalars:2.0.0' 使用方式好简单: new Retrofit.Builder() //01:获取Retrofit对象 .baseUrl(Globals.SERVER_ADDRESS...short.class || type == Short.class) { return ScalarRequestBodyConverter.INSTANCE; } 这里会自动根据返回数据转换成你泛型里写类型数据...,如果服务器返回是一个HTML网页, *那么移动端也能拿到一个Json数据,用于保证数据可解析不至于崩溃

    4.3K20

    【译】Retrofit 2 - 如何从服务器下载文件

    正如你所看到,它看上去就像一个普通Retrofit 2请求。值得注意是,我们将ResponseBody作为了返回类型。...Retrofit会试图解析并转换它,所以你不能使用任何其他返回类型,否则当你下载文件时候,是毫无意义。 第二种方案是Retrofit 2新特性。现在你可以轻松构造一个动态地址来作为全路径请求。...如果你还没有试过动态URL方式,可以翻到开头,看看这篇专题博客Retrofit 2动态URL。 哪一种方案对你有用呢,我们接着往下看。...一旦创建了service,我们就能像其他Retrofit调用一样做网络请求了。 还剩下一件很重要事,隐藏在代码块writeResponseBodyToDisk()函数:负责将文件写进磁盘。...如果应用需要下载略大文件,我们强烈建议阅读下一节内容。 当心大文件:请使用@Streaming! 如果下载一个非常大文件,Retrofit会试图将整个文件读进内存。

    2.3K10

    Retrofit原理_Retrofit

    ServiceMethod对象如果没有,则通过Method和Retrofit对象构造一个 ServiceMethod对象,并将其放入缓存。...对象,这一步主要是根据 Method返回参数来匹配,比如如果方法返回参数是Call对象,那么ServiceMethod就会使用默认 CallAdpaterFactory来生成CallAdpater...,而如果返回对象是RxJavaObserable对象,则会使用 RxJavaCallAdapterFactory提供CallAdpater。...4.4 callAdapter 在retrofit,invoke() 里面的最后一行代码, return serviceMethod.callAdapter.adapt(okHttpCall); 那么我们可以设想一下为什么...如果我们想要返回不是Call呢?比如RxJavaObservable,这种情况下该 怎么办呢? 适配器模式在此发挥了其应用作用!!!

    71830

    Java动态代理-实战

    说动态代理之前,要先搞明白什么是代理,代理字面意思已经很容易理解了,我们这里撇开其他解释,我们只谈设计模式代理模式 什么是代理模式(Proxy) 定义:给目标对象提供一个代理对象,并由代理对象控制对目标对象引用...在代理模式,是需要代理对象和目标对象实现同一个接口(如果是不同接口,那就是适配器模式了),看下面的UML图 ?...动态代理 uml.png 为什么要用代理 最最最主要原因就是,在不改变目标对象方法情况下对方法进行增强,比如,我们希望对方法调用增加日志记录,或者对方法调用进行拦截,等等......= null) {} } 最终执行结果,当然这里只是初步实现了Retrofit一点点功能,我们目标还是讲解动态代理这个技术,以及它能够干什么 ?...执行结果 最后一点小Tip 可以看到,我们上面的低配Retrofit,并没有被代理类,因为我们仅仅通过解析ApiService接口中注解信息已经足够我们去发起Http请求,所以技术在于灵活运用

    86920

    Retrofit源码模拟

    ().string(); } } 这个代码是最简单一个网络请求,我们来分析下 client使用默认okhttpclient对象,我们在调用方法时候如果想要定制client对象,这里不能写死在里面...对象实现定制与网络请求,第二需要一个对象来处理自定义方法,解析并实现细节,第三需要一个对象来将传入类型转化为请求数据,第四需要将请求数据转化为想要类型 看来至少需要4个变量来实现,这4个变量也不一定必须要...NO,NO,NO,下面才是重点 我们看以上代码,这样自己定义接口动态代理实现方式也真是挺高端了,但是与retrofit功能相比还有一个地方不同,我们在定义接口时候直接返回结果了,这样我们假如想要得到...String json); } CallImpler返回类是一个Call包装类,里面泛型参数是请求返回类型,这里需要之前转换类convert进行转化 CallImpler类只是重复了call接口方法...call包装类CallImpler 这样修改,我们就可以得到call对象了,实现call请求,查询,取消等等操作~ 到这里应该差不多了吧,但是比起Retrofit还是差一些,哪里呢,Retrofit

    980100

    从源码梳理Retrofit网络请求过程

    Retrofit引入 在Android Studio引入Retrofit非常方便,目标最新版本是2.3,在app-build文件-dependencies节点下加入以下依赖即可: compile...屏幕快照 2017-09-25 下午4.01.15.png 这个方法返回是一个动态代理对象,当我们用这个对象调用listRepos方法时候实际上会走到这里invoke方法,在这个方法里,首先根据接口定义方法...在build方法,遍历method所有注解,来取出其中信息,比如请求方法以及地址等: for (Annotation annotation : methodAnnotations) {...屏幕快照 2017-09-25 下午4.12.36.png 拿到封装好ServiceMethod对象后,构造一个OkHttpCall对象,以便与进行真正网络请求(Retrofit基于OkHttp实现网络请求...这里真正调用是okHttpCall对象enqueue方法,这里进行就是具体网络请求操作了。

    56440

    从零开始实现一个 mini-Retrofit 框架

    ConverterFactory,该工厂类负责根据传入Type类型,返回一个能够将该Type类型对象转换成RequestBodyConverter 我们对Retrofit构造函数以及paresePost...; } } } } 3.5 实现CallAdapter 支持方法返回类型 继续回到Http请求声明,目前我们方法所支持返回类型都是OKHttp...Call对象,而Call对象从使用上来说,目前还是有些繁琐,原生Call对象返回是ResponseBody还需要开发者自己处理并做转换。...Call对象,如果不是,就在框架内部直接同步调用网络请求得到响应Json内容后直接转换成JavaBean对象作为方法返回值,但是这个设想存在这样几个问题 要实现直接返回Http结果则方法调用是同步调用...,如果在主线程做IO请求肯定是不合理 如果内部IO异常了,或者JSON转换失败了方法返回是什么呢?

    2K10

    Carson带你学Android:这是一份详细 Retrofit使用教程(含实例讲解)

    // 如果想直接获得Responsebody内容,可以定义网络请求返回值为Call } 下面详细介绍Retrofit 网络请求接口 注解类型。...// Retrofit把网络请求URL分成了两部分:一部分放在Retrofit对象里,另一部分放在网络请求接口里 // 如果接口里url是一个完整网址,那么放在Retrofit对象URL...,该值为空即可 // type:语言自动检测时为 null,为 null 时可为空。...) 步骤4:创建Retrofit对象 步骤5:创建 网络请求接口 实例 步骤6:发送网络请求 以最常用 异步请求 为例 步骤7:处理返回数据 PostRequest.java public...Retrofit 拓展使用 Retrofit使用场景非常丰富,如支持RxJava和Prototocobuff 具体设置也非常简单 & 方便: Retrofit

    3.5K20

    retrofit-helper 简洁封装retrofit,优雅取消请求

    封装逻辑解析 2.1 RetrofitFactory全局管理retrofit实例 DEFAULT 静态变量管理默认常用retrofit对象,OTHERS 管理其他多个不同配置retrofit /...> OTHERS = new ConcurrentHashMap(2); /** * 全局Retrofit对象 */ public static volatile...如果为HttpError, * 则为{@link retrofit2.Converter#convert(Object)}内抛出异常 * * @param call2 call * @param...hashCode()); } 4.注意事项 4.1 构建retrofit是需要ExecutorCallAdapterFactory实例,否则无法处理返回为Call2服务接口 4.2 Callback2...回调函数均在主线程执行,如果调用了Call2.cancel()方法,除了onCompleted()方法会执行外其他回调方法都不会执行 5.下载 implementation "com.xcheng:retrofit-helper

    2.9K20

    Retrofit2.0通俗易懂学习姿势,Retrofit2.0 + OkHttp3 + Gson + RxJava

    /") .build(); 这里大家就看到我们baseUrl了,就是我们Gank接口前缀,我们现在有了retrofit,通过他create方法就可以创建我们接口对象了...GnakApi api = retrofit.create(GnakApi.class); 这里虽然是返回一个GnakApi,但是通过源码我们知道,这里create实际上是通过代理方式拿到,可以看下...,但是这里最后拼接时一个key,所以在传参前面加上Query,如果你想两个参数,还有一个城市的话,你就多加一个参数咯,我们现在初始化一下 Retrofit retrofit = new Retrofit.Builder...实在是数据太多了,所以我就没有显示出来,有需要我会在本文最后提供Sample,这里我们请求,数据太多,我就直接请求一个了,来看运行之后结果: ?...(GsonConverterFactory.create()) .build(); api = retrofit.create(GankApi.class); 这样拿到我们接口对象后直接请求

    1.7K60
    领券