android http请求解析-使用JSONObject 或者使用Gson()

101 阅读1分钟

使用JSONObject不用建立一个全模型, 使用Gson()需要建立一个全模型来匹配返回的json数据。

fun getOwnLinenStockInHotel(CUST_DEPT_CODE: String): ApiResponse<StockOfSendHotelResp2?> {
    var params = mutableMapOf<String, String>()
    params["CUST_DEPT_CODE"] = CUST_DEPT_CODE
    val res = PuruiHttpUtils.get(
        api = "SendingWash/GetEPC_Position",
        params = params,
        needCached = false
    )
    when (res.code) {
        200 -> {
            val jsonObject = JSONObject(res.body ?: "")
            val code = jsonObject.optInt("code", -1)
            val data = jsonObject.optJSONObject("data")
            val msg = jsonObject.optString("msg", "")
            if (code == 200) {
                val account_mstrmod = data?.optJSONObject("account_mstrmod")
                val resultList = StockOfSendHotelResp2(
                    epcs = arrayListOf(),
                    count = 0, account_mstrmod = SendHotelReceiveConfig(
                        SX_RECE_COUNT_SET = account_mstrmod?.optInt("SX_RECE_COUNT_SET")?:0,
                        SX_RECE_COUNT_TEXT = account_mstrmod?.optString("SX_RECE_SEND_TEXT")?:"",
                        SX_RECE_SEND_SET = account_mstrmod?.optInt("SX_RECE_SEND_SET")?:0,
                        SX_RECE_SEND_TEXT = account_mstrmod?.optString("SX_RECE_SEND_TEXT")?:"")
                )
                val epcs = data?.optJSONObject("epcs")
                val goodIDs = epcs?.keys()
                goodIDs?.let {
                    for (goodId in goodIDs) {
                        val epcIds = epcs.optJSONArray(goodId)
                        epcIds?.let {
                            for (idx in 0 until epcIds.length()) {
                                val epcId = epcIds.getString(idx)
                                resultList.epcs?.add(
                                    PhoneApp_GetEPC_PositionResp(
                                        goodId = goodId,
                                        epcId = epcId
                                    )
                                )
                            }
                        }
                    }
                }
                return PuruiHttpUtils.handleError(code = code, msg = msg, data = resultList)
            } else {
                return PuruiHttpUtils.handleError(
                    code = code,
                    msg = msg.ifBlank { res.body ?: "" },
                    data = null
                )
            }

        }
        /* 200->{
             val gson=Gson()
             kotlin.runCatching {
                 return gson.fromJson(res.body,object : TypeToken<ApiResponse<StockOfSendHotelResp?>>() {}.type) as ApiResponse<StockOfSendHotelResp?>
             }.onFailure {
                 return  PuruiHttpUtils.handleError(code= PuruiApiImpl.parseErrorCode,msg="${it.message}",data=null)
             }
         }*/else -> {
        PuruiHttpUtils.handleError(code = res.code, msg = res.error, data = null)
    }
    }
    return PuruiHttpUtils.handleError(code = res.code, msg = res.error, data = null)
}