Android Volley JsonObjectRequest onResponse如何允许JSONObject为NULL

时间:2018-08-02 08:43:19

标签: 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();
            }
    )
};

在这种特定情况下,我要到达服务器以从DB获取对象。 当服务器端的对象存在时,java上的代码会命中方法OnSuccess,但是,当服务器时,仅返回一个null对象(服务器上没有错误,它只是返回一个null对象,如果是这种情况),那么我的Java代码就击中了“ onError”。...

但是对我而言,这是完全错误的,因为我希望仅在确实存在错误时(或因为服务器关闭,数据库关闭或在执行过程中发生某些异常)才发生onError,而不是服务器将返回一个简单的null对象。

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

谢谢

1 个答案:

答案 0 :(得分:0)

我认为Volley的JsonObjectRequest专为处理JSON对象而设计。如果服务器返回null值,则通常会调用onError回调,因为正如您在评论中所说,null无法转换为JSONObject。 / p>

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

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

相反,当响应为null时,您可以将其视为您的需要(当然,避免像上面那样创建JSONObject)