我有以下幾行: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(); } )};在這種特定情況下,我到達(dá)服務(wù)器以從數(shù)據(jù)庫(kù)獲取對(duì)象。當(dāng)服務(wù)器端的對(duì)象存在時(shí),java上的代碼命中方法OnSuccess,但是,當(dāng)服務(wù)器端,簡(jiǎn)單地返回一個(gè)null對(duì)象(服務(wù)器端沒有錯(cuò)誤,它只是返回一個(gè)null對(duì)象,如果是這種情況)那么我的 Java 代碼正在打“ onError”....但對(duì)我來說,這是完全錯(cuò)誤的,因?yàn)槲蚁M?onError 只在確實(shí)發(fā)生錯(cuò)誤時(shí)發(fā)生(或者因?yàn)榉?wù)器關(guān)閉,或者數(shù)據(jù)庫(kù)關(guān)閉,或者沿途發(fā)生了一些異常),而不是在服務(wù)器返回時(shí)發(fā)生一個(gè)簡(jiǎn)單的null對(duì)象。在java中解決這個(gè)問題的最簡(jiǎn)單方法是什么?我不想更改服務(wù)器以返回一個(gè)空對(duì)象(不是null)...謝謝
1 回答

料青山看我應(yīng)如是
TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超8個(gè)贊
我認(rèn)為 VolleyJsonObjectRequest
是專門為處理 JSON 對(duì)象而設(shè)計(jì)的。如果服務(wù)器返回null
值,onError
則調(diào)用回調(diào)是正常的,因?yàn)檎缒谠u(píng)論中所說,null
無法轉(zhuǎn)換為JSONObject
.
我的建議是使用不太嚴(yán)格的 Volley 對(duì)象請(qǐng)求,例如StringRequest
. 當(dāng)onSuccess
被擊中并且結(jié)果未null
轉(zhuǎn)換時(shí),將結(jié)果代碼轉(zhuǎn)換為JSONObject
:
JSONObject jsonResp = new JSONObject(response); OnSuccess.accept(jsonResp);
相反,當(dāng)響應(yīng)為 時(shí)null
,您可以將其視為您的需要(當(dāng)然避免像上面那樣創(chuàng)建 JSONObject)
添加回答
舉報(bào)
0/150
提交
取消