Android Volley 库无法处理 204 和空主体响应

2024-04-12

我正在使用最新的 Volley 库,当我的 api 返回 204 且响应中没有正文时,我遇到了问题。 BasicNetwork.java 中的以下代码似乎未按预期工作:

// Some responses such as 204s do not have content.  We must check.
if (httpResponse.getEntity() != null) {
    responseContents = entityToBytes(httpResponse.getEntity());
} else {
    // Add 0 byte response as a way of honestly representing a
    // no-content request.
    responseContents = new byte[0];
}

getEntity 的结果对我来说永远不会为空,但它是空的。我通过检查curl和postman确保我的API没有返回任何内容(只是为了额外确保我不会发疯)。还有其他人有这样的问题吗?

现在我只是将其更改为:

if (statusCode != HttpStatus.SC_NO_CONTENT && httpResponse.getEntity() != null)

我知道这并不能解决根本原因,但我想确保在深入研究这个问题之前我没有遗漏任何明显的东西。

Thanks!

编辑: 抱歉,我忘了提及,实际问题是在方法entityToBytes 中发生超时异常,这很奇怪,因为没有要检索的正文。

另外,我没有使用实际功能齐全的 Web 服务 API,因为它尚不可用。相反,我连接到养蜂场上的模拟网络服务,但我不明白养蜂场怎么会出现问题。


这与其说是一个答案,不如说是对您的解决方案的详细阐述!首先,我使用来自 API 的 204 响应,并且遇到了与您完全相同的问题。我在 BasicNetwork.java 中使用了您的代码来解决它 - 该行if (statusCode != HttpStatus.SC_NO_CONTENT && httpResponse.getEntity() != null)

我还发现如果我使用标准JsonObjectRequest然后请求Response.ErrorListener会被触发,因为主体为空。

我创建了一个新的JsonObjectRequestWithNull它在正文为空或空白的情况下提供成功响应。代码:

public class JsonObjectRequestWithNull extends JsonRequest<JSONObject> {

public JsonObjectRequestWithNull(int method, String url, JSONObject jsonRequest,
                         Response.Listener<JSONObject> listener, Response.ErrorListener errorListener) {
    super(method, url, (jsonRequest == null) ? null : jsonRequest.toString(), listener,
            errorListener);
}

public JsonObjectRequestWithNull(String url, JSONObject jsonRequest, Response.Listener<JSONObject> listener,
                         Response.ErrorListener errorListener) {
    this(jsonRequest == null ? Request.Method.GET : Request.Method.POST, url, jsonRequest,
            listener, errorListener);
}

@Override
protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) {
    try {
        String jsonString = new String(response.data,
                HttpHeaderParser.parseCharset(response.headers, PROTOCOL_CHARSET));
        //Allow null
        if (jsonString == null || jsonString.length() == 0) {
            return Response.success(null, HttpHeaderParser.parseCacheHeaders(response));
        }
        return Response.success(new JSONObject(jsonString),
                HttpHeaderParser.parseCacheHeaders(response));
    } catch (UnsupportedEncodingException e) {
        return Response.error(new ParseError(e));
    } catch (JSONException je) {
        return Response.error(new ParseError(je));
    }
}

}

相关位是:

        //Allow null
        if (jsonString == null || jsonString.length() == 0) {
            return Response.success(null, HttpHeaderParser.parseCacheHeaders(response));
        }

希望对某人有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android Volley 库无法处理 204 和空主体响应 的相关文章

  • Kapt 未在即时应用程序功能模块中生成类

    我在我的 Android 应用程序中使用 dagger2 即使没有错误 它也不会生成匕首组件类 我已经在设置中启用了注释处理器并重新启动了我的 android studio 但这对我来说不起作用 我也读过这个帖子Dagger2 不生成 Da
  • 处理 Android 锁屏上的音量变化?

    我想做的是 能够在 android 4 4 上的锁屏上捕获音量增大 减小按钮操作 Google Cast 设计清单 https developers google com cast docs design checklist sender
  • Android向后兼容技术

    我现在在开发基于最新 API 15 ICS 的 15 项活动 Android 应用程序方面取得了进展 现在我发现应用程序的主要功能主义者即使支持 android v4 也不向后兼容 例如 1 fragment事务动画 2 将StringSe
  • 编译后从字节代码中删除注释

    我们正在使用一个包含使用 JAXB 注释进行注释的 bean 的库 我们使用这些类的方式完全不依赖于 JAXB 换句话说 我们不需要 JAXB 也不依赖注释 但是 由于注释存在 它们最终会被处理注释的其他类引用 这要求我将 JAXB 捆绑到
  • FLAG_ACTIVITY_REORDER_TO_FRONT 被忽略

    我有一个包含项目列表的 FragmentActivity 当应用程序处于后台时 可以推送该项目列表 发生这种情况时 我想创建一个状态栏通知并提醒用户更新 当用户单击通知时 活动应重新排序到前面并显示在屏幕上 同时在列表底部显示新项目 所以我
  • Android 谷歌地图 V2 已停止

    我正在尝试构建地图应用程序并关注这个链接 https blog emildesign rhcloud com p 435一步步 我在这里找到了类似的主题 但对我没有帮助 我想显示地图 但是当我运行它时 它返回强制关闭和我的 Android
  • 在后台服务中持续获取位置更新

    我正在开发需要在后台服务中持续获取位置更新的应用程序 我已经使用了它正在使用的后台粘性服务 但是 即使我添加了启动广播并在那里启动了服务 启动完成后服务也没有启动 服务启动并立即被杀死 另外 这不适用于奥利奥 服务在应用程序关闭几分钟后停止
  • 无法在云控制台中启用 Maps SDK for Android

    我在云控制台中启用适用于 Android 的 Maps SDK 时遇到此问题 https console cloud google com https console cloud google com 它会抛出以下错误 附截图 我收到错误消
  • 如何在android中画一条曲线?

    我是 Android 新手 正在开发一个关于绘制线条的示例项目 我想画一条连接两点的曲线或高架线 x1 y1 and x2 y2 我试过canvas drawArc 方法 但是RectF内的值drawArc方法只是圆的 x y 中心点 它在
  • 我应该选择的最低 SDK 版本是多少? (截至2018年11月)

    据我所知 android studio 中默认的最小 SDK 设置是 15 我读到我应该增加它 因为没有多少人 或者可能没有 仍在使用该 android 版本 另外 我计划使用 android studio 中的一些新功能 这些功能仅适用于
  • Android - 多次实例化一个片段?

    我正在创建一个在 ListView 中显示数据的应用程序 数据分为两种类型 热门 收藏夹 我有一个活动和两个片段 片段根据类别显示项目列表 我为此使用了 ListView 然后我有两个fragment layouts 它们在设计上完全相同
  • 如何知道用户是否在 Android 应用程序中输入了错误的密码(锁定屏幕)

    我正在开发一个 Android 应用程序 如果用户在 Android 锁定屏幕中输入错误的密码 则必须完成其中一项活动 例如 如果用户输入错误的密码 则会发送电子邮件 我将不胜感激任何帮助 提前致谢 Kshitij 锁屏在完全沙箱环境中运行
  • 如何在Android网格视图中设置单元格大小?

    我正在尝试为应用程序制作一个带有大图标的网格视图 但我找不到任何有关修改 Android 上网格布局上的单元格大小的教程 有人可以给我一个例子或相关链接吗 Thanks 就像另一个一样适配器视图 http developer android
  • Android Drawable 绘图性能?

    在我看来 我有一个简单的 ARGB 可绘制对象 大约需要 2 毫秒才能绘制 但我可以在 0 5 毫秒内绘制与位图相同的文件 只是一些快速代码 我真的不能认为它是一个选项 优化可绘制对象的绘制速度的最佳方法是什么 这取决于可绘制的数量以及每个
  • 使用 UPI url 调用 PSP 应用程序

    我正在尝试创建一个商家应用程序 它将根据 NPCI 的指南生成一个 url 此 url 将作为意图共享 并且 PSP 应用程序 任何注册的银行应用程序 应该能够侦听该 url 并被调用 我已经形成了这样的网址 upi pay pa icic
  • 有没有办法在多个嵌套的 RecyclerView 之间共享同一个 LayoutManager

    我正在开发一个显示游戏列表的应用程序 在每个游戏的 itemView 内 我还有一个要显示的视频列表 预览和结构如下 我部署了一个RecyclerView作为窗口根视图 然后对于视频 我使用网格样式的RecyclerView来显示 所以这里
  • 在 android 中,第一次单击时按钮侦听器未注册

    因为我是 Android 新手 所以我遇到了按钮监听器的问题 我正在使用 OnClickListener 来处理胸像 但它第一次点击后不执行一旦我单击多个 它就会表现良好 但如何使其在第一次单击时成为可能 这是我的代码 public cla
  • BitmapFactory.decodeResource() 忽略 jpg 图像的 inPreferredConfig 选项

    我尝试将jpeg资源图像加载到ARGB 8888格式的位图 BitmapFactory Options opts new BitmapFactory Options opts inPreferredConfig Bitmap Config
  • 将 Crashlytics 集成到图书馆项目

    我有一个图书馆项目 自定义视图库项目 它没有任何活动 服务 我想将 Crashlytics SDK 集成到我的库中 当我尝试通过 Android Studio 的 Crashlytics 插件 工具栏中的图标 添加它时 它只是停留在 Che
  • Application.onLowMemory() 未调用

    我创建了自己的应用程序类 我尝试调试它 代码在 Application onCreate 处停止 但不会在 onLowMemory 处停止 为了测试该场景 我打开了许多其他高内存应用程序 我看到的是调试会话终止 在 Eclipse 中 并且

随机推荐

  • 如何降低 PickerView 中选择行的速度?

    我的目标是创建一台老虎机 其中的行一排一排地旋转 它们需要一排一排地停止旋转 然而 为了让它看起来漂亮 这些行需要旋转至少 3 秒 我认为 PickerView 是最好的选择 因为我不知道如何以不同的方式进行这项工作 当这是我的代码时 se
  • symfony 每个块都有无空间

    我如何用无空间包装每个块代码以从我的 twig html 中裁剪空白 例如现在我有 block content div class box clearfix clearall div class ct colcontainer div cl
  • 在 R 中模拟不同初始条件的 ODE 模型

    我有一个模型 我想生成随机初始条件 运行模型并保存输出 以便每个模拟都是重复的 但我很难解释和实现循环 而且我也知道它们并不总是在 R 中最好使用 所以我很挣扎 我的最终目标是在 10 个不同的随机初始条件下迭代模拟 并保存 ODE 的输出
  • MySQL中如何查询某列的变化次数

    我有一个表存储具有两个属性的项目 所以该表有三列 item id property 1 property 2 insert time 1 10 100 2012 08 24 00 00 01 1 11 100 2012 08 24 00 0
  • 如何从命令行运行单个 gradle 任务

    在我的项目中 我的 build gradle 中有几个任务 我希望这些任务在运行时是独立的 即我需要从命令行运行单个任务 但是命令 gradle taskA 将同时运行我不想要的taskA和taskB 如何阻止任务正在运行 这是我正在做的事
  • boost.test 与 CppUnit

    我已经使用 CppUnit 一段时间了 并且对此感到满意 随着我们使用 boost 库的越来越多的部分 我对 boost test 进行了简短的了解 现在我想知道是否应该在新项目中切换到 boost test 这里有人能告诉我这两个框架之间
  • 哪个队列与 requestAnimationFrame 关联?

    今天我在接受采访时被问到这个问题 我无法回答这个问题 面试官说有一个特殊的队列用于 requestAnimationFrame 回调 但我找不到任何这方面的信息 如果 rAF 有它自己的队列 那么为什么这个队列从未在任何地方被提及 当我们谈
  • 任何免费的 UPC/条形码 DB [已关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 为什么 Windows 身份验证可以从本地到服务器工作,但不能从服务器到服务器工作?

    我有两个网站 A and B A使用一个 APIB暴露 并且B需要 Windows 身份验证 两个站点都位于域中D API 通过以下方式使用HttpClient 以及当站点A在我的域帐户下本地运行 位于 DomainP 访问被授予 在这种情
  • Webdriver (c#) - 大概通过文本查找按钮

    我正在努力抓住按钮 有人能向我指出如何获取按钮句柄并使用 xpath 或 css 选择器单击它的正确方向吗 这是代码
  • 将字符串转换为静态字符串

    Swift 3 0 有没有办法获得StaticString键入一个String类型哪个复杂 示例 需要转换才能工作 let aString StaticString One part Second part 这是不可能的 因为StaticS
  • 在 Swift 中解码 JSON 中的 base64_encode 图像

    我有一个 mysql 数据库 其中包含一些图像 我从 php 文件接收数据 php result key image based64 encode resultArray key image 现在有了 Json 文件 我得到如下内容 Jso
  • 如何在CSS中绘制可配置的饼图

    从链接http www kylejlarson com blog 2011 how to create pie charts with css3 http www kylejlarson com blog 2011 how to creat
  • 切片 Pandas 时出现值错误

    我有一个 DataFrame 我想使用 string contains 方法 我相信当我阅读时我已经找到了如何做到这一点pandas dataframe 按部分字符串选择 https stackoverflow com questions
  • android:如何检查应用程序是否在后台运行2

    我有解决办法 public static boolean isApplicationSentToBackground final Context context ActivityManager am ActivityManager cont
  • 如何使用expo文件系统保存图库中的二维码

    我正在使用 expo 开发一个 React Native 项目 它包括创建一个二维码 我已经完成了 将二维码转换为图像 然后将其保存到图库 我想将 QR 码转换为图像 然后将其保存到我的图库中或共享 在下面给出的代码中 在编译时会出现错误
  • C++ 将基础对象类型转换为派生对象

    所以我有一个动态分配的基类数组 我在数组中存储了其派生类的一些对象 学生 基 类及其派生类都有一个getInfo 函数 显然派生类已经覆盖了该基类getInfo 目标是使用getinfo从基类中获取函数 然后将派生类的两个对象键入类 返回派
  • LINQ Count ..最好的方法

    我的公司刚刚开始使用 LINQ 但我仍然对 LINQ 命令和 SQL 的抽象性 如果这是一个词的话 有一些疑问 我的问题是 Dim query From o In data Addresses Select o Name Count 在我看
  • 错误:参数类型不兼容

    我正在用 C 写一个列表 以下是来源 include
  • Android Volley 库无法处理 204 和空主体响应

    我正在使用最新的 Volley 库 当我的 api 返回 204 且响应中没有正文时 我遇到了问题 BasicNetwork java 中的以下代码似乎未按预期工作 Some responses such as 204s do not ha