我有以下几行:
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
)。...
谢谢
答案 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)