Java Android截取JSONObject请求onResponse如何允许JSONObject为NULL
我有以下几行:Java Android截取JSONObject请求onResponse如何允许JSONObject为NULL,java,android,android-volley,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 = n
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();
}
)
};
Consumer OnSuccess;//在其他地方定义。。。
JsonParameters=JsonParameters;//在其他地方定义。。。
字符串targetUrl=BaseService.BuildUrl(BASE\u TARGET\u URL,TargetMethod);
JsonObjectRequest JsonObjectRequest=新JsonObjectRequest
(
Request.Method.POST,
targetUrl,
JsonParameters,
答复->{
OnSuccess.accept(响应);
},
错误->{
Toast.makeText(BaseService.BaseContext,
“错误:通讯不工作”,Toast.LENGTH_LONG.show();
}
)
};
在这个特定的例子中,我正在到达服务器以从数据库获取一个对象。
当服务器端的对象存在时,java上的代码点击方法OnSuccess
,然而,当服务器简单地返回null
对象(服务器上没有错误,如果是这种情况,它只是返回null
对象)时,我的java代码点击的是“onError
”
但对我来说,这显然是错误的,因为我希望onError只发生在真正有错误的时候(或者因为服务器关闭,或者DB关闭,或者发生了一些异常),而不是当服务器返回一个简单的null
对象时
用java解决这个问题最简单的方法是什么?我不想更改服务器以返回空对象(不是null
)
谢谢我认为Volley的
JsonObjectRequest
是专门为处理JSON对象而设计的。如果服务器返回null
值,则调用onError
回调是正常的,因为正如您在评论中所说,null
无法转换为JSONObject
我的建议是使用不太严格的凌空对象请求,例如StringRequest
。当点击onSuccess
并且结果不是null
时,将生成的代码转换为JSONObject
:
JSONObject jsonResp = new JSONObject(response);
OnSuccess.accept(jsonResp);
相反,当响应为
null
时,您可以根据需要处理它(当然避免像上面那样创建JSONObject),但如果服务器返回null
,error
变量的内容是什么?@Lino Value null类型org.json.JSONObject$1无法转换为JSONObject下面的答案后有任何反馈?最后,我的解决方案是按照您的建议使用StringRequest。我的代码基于以下答案: