java - Android Volley JsonObjectRequest onResponse 如何允许 JSONObject 为 NULL

标签 java android android-volley

我有以下几行:

Consumer<JSONObject> OnSuccess;  // Defined somewhere else...
JsonParameters = jsonParameters; // Defined somewhere else...
String targetUrl = BaseService.BuildUrl(BASE_TARGET_URL, TargetMethod);

JsonObjectRequest jsonObjectRequest = new JsonObjectRequest
    (
            Request.Method.POST,
            targetUrl,
            JsonParameters,
            response -> {
                OnSuccess.accept(response);
            },
            error -> {
                Toast.makeText(BaseService.BaseContext, 
                      "ERROR: COMS NOT WORKING", Toast.LENGTH_LONG).show();
            }
    )
};

在这种特定情况下,我正在连接服务器以从数据库中获取一个对象。 当服务器端的对象存在时,java上的代码命中方法OnSuccess,然而,当服务器端,只是返回一个null对象(没有错误服务器,它只是返回一个 null 对象,如果是这种情况)那么我的 java 代码就会遇到“onError”......

但对我来说这是完全错误的,因为我希望 onError 只在确实存在错误时发生(或者因为服务器关闭,或者数据库关闭,或者过程中发生了一些异常),而不是当服务器返回一个简单的 null 对象。

在 Java 中解决这个问题最简单的方法是什么?我不想更改服务器以返回一个空对象(不是 null)...

谢谢

最佳答案

我认为 Volley 的 JsonObjectRequest 是专门为处理 JSON 对象而设计的。如果服务器返回 null 值,则调用 onError 回调是正常的,因为正如您在评论中所说, null 不能转换为 JSONObject

我的建议是使用不太严格的 Volley 对象请求,例如 StringRequest。当 onSuccess 被命中并且结果不是 null 时,将结果代码转换为 JSONObject:

JSONObject jsonResp = new JSONObject(response);
OnSuccess.accept(jsonResp);

反之,当response为null时,那么你可以把它当作你的需要(当然也避免像上面那样创建JSONObject)

关于java - Android Volley JsonObjectRequest onResponse 如何允许 JSONObject 为 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51649262/

相关文章:

java - 我如何在java中复制一个元素?

JavaFX - 文件(视频)上传

java - Netty Guice 集成

android - 在一个表单或类中,我们可以在android开发中添加多少选项卡?

android - Xamarin 形成 RelativeLayout 使用

java - Volley字符串请求在android中没有给出响应

php - Android 将 Lat Long 发送到 php 并存储在 mysql 中

java - Android 通话记录查询给出非法参数异常 : column '_id' does not exist

java - 除非明确指定,否则如何默认将 Spring Data JPA 从 camelCase 命名为 snake_case?

java - 非阻塞文件缓存(BitmapLruCache)实现?