所以我正在尝试使用端点 https://someURL.com/switching-product/switch?orderID=A001
获取 API,
This是从 Postman 看到的返回的 JSON 格式。
所以我在 NetworkConfig.kt
类中使用这个接口(interface)来获取这个端点:
//Endpoint: https://someURL.com/switching-product/switch?orderID=A001
interface getOutstandingOrderDetail{
@GET("switch")
fun getOutstandingOrderDetail(@Query("orderID") orderID: String): Call<OutstandingOrderDetailPOJODataClassData>
}
并将其存储在此数据类中(由从 JSON 生成 POJO 的 Android 扩展生成):
data class OutstandingOrderDetailPOJODataClass(
@field:SerializedName("data")
val data: OutstandingOrderDetailPOJODataClassData? = null,
@field:SerializedName("error")
val error: Error? = null
)
data class OutstandingOrderDetailPOJODataClassData(
@field:SerializedName("Header")
val header: OutstandingOrderDetailPOJODataClassHeader? = null,
@field:SerializedName("Detail")
val detail: List<OutstandingOrderDetailPOJODataClassDetailItem?>? = null
)
data class OutstandingOrderDetailPOJODataClassHeader(
@field:SerializedName("buyer_address")
val buyerAddress: String? = null,
@field:SerializedName("total_price")
val totalPrice: Int? = null,
@field:SerializedName("buyer_name")
val buyerName: String? = null,
@field:SerializedName("status_confirmed_yn")
val statusConfirmedYn: String? = null,
@field:SerializedName("order_date")
val orderDate: String? = null,
@field:SerializedName("outlet_id")
val outletId: String? = null,
@field:SerializedName("nip")
val nip: String? = null,
@field:SerializedName("jumlah_product")
val jumlahProduct: Int? = null,
@field:SerializedName("last_update")
val lastUpdate: String? = null,
@field:SerializedName("phone_number")
val phoneNumber: String? = null,
@field:SerializedName("order_running_id")
val orderRunningId: Int? = null,
@field:SerializedName("status_tagged_yn")
val statusTaggedYn: String? = null,
@field:SerializedName("order_id")
val orderId: String? = null
)
data class OutstandingOrderDetailPOJODataClassError(
@field:SerializedName("msg")
val msg: String? = null,
@field:SerializedName("code")
val code: Int? = null,
@field:SerializedName("status")
val status: Boolean? = null
)
data class OutstandingOrderDetailPOJODataClassDetailItem(
@field:SerializedName("item_price_new")
val itemPriceNew: Int? = null,
@field:SerializedName("item_name_new")
val itemNameNew: String? = null,
@field:SerializedName("total_price")
val totalPrice: Int? = null,
@field:SerializedName("item_price")
val itemPrice: Int? = null,
@field:SerializedName("item_name")
val itemName: String? = null,
@field:SerializedName("status_refund")
val statusRefund: String? = null,
@field:SerializedName("detail_id")
val detailId: Int? = null,
@field:SerializedName("procode_new")
val procodeNew: String? = null,
@field:SerializedName("refund_date")
val refundDate: String? = null,
@field:SerializedName("request_refund")
val requestRefund: String? = null,
@field:SerializedName("procode")
val procode: String? = null,
@field:SerializedName("last_update")
val lastUpdate: String? = null,
@field:SerializedName("item_qty_new")
val itemQtyNew: Int? = null,
@field:SerializedName("order_id")
val orderId: String? = null,
@field:SerializedName("total_price_new")
val totalPriceNew: Int? = null,
@field:SerializedName("item_qty")
val itemQty: Int? = null,
@field:SerializedName("refund")
val refund: Int? = null
)
这是我获取 URL 数据的 fragment 的代码 fragment :
private fun fetchOrderedItemListData() {
NetworkConfig()
.getOutstandingDetailOrderedItemListService()
.getOutstandingOrderDetailOrderedItemList("A001")
.enqueue(object :
Callback<OutstandingOrderDetailPOJODataClassData> {
override fun onFailure(
call: Call<OutstandingOrderDetailPOJODataClassData>,
t: Throwable
) {
Log.i("Order", "It Failed!!")
if (call.isCanceled) {
Toast.makeText(
(activity as AppCompatActivity),
"Request Aborted",
Toast.LENGTH_SHORT
).show()
} else {
Toast.makeText(
(activity as AppCompatActivity),
t.localizedMessage,
Toast.LENGTH_SHORT
).show()
}
}
override fun onResponse(
call: Call<OutstandingOrderDetailPOJODataClassData>,
response: Response<OutstandingOrderDetailPOJODataClassData>
) {
Log.i("Order", "Ordered Item FEtched -> \n ${response.body()}") <= This is for debugging purpose
binding.rvOrderedItemList.adapter =
response.body()
?.let { OrderedItemListAdapter(it, this@OrderDetailFragment) }
binding.rvOrderedItemList.layoutManager =
LinearLayoutManager((activity as AppCompatActivity))
}
})
}
正如您在上面看到的,我使用 Log.i 尝试在 LogCat 中打印 response.body(),但是它在 Log Cat 中返回 null。可以看看here .
我错过了什么吗?如果我遗漏了这个问题的任何细节,请随时提问。
最佳答案
您的 Retrofit 函数设置为:
@GET("switch")
fun getOutstandingOrderDetail(@Query("orderID") orderID: String): Call<OutstandingOrderDetailPOJODataClassData>
Call<>
中的数据类型需要匹配您的 JSON。您有与您的 JSON 匹配的数据类......但该层次结构的根是 OutstandingOrderDetailPOJODataClass
, 不是 OutstandingOrderDetailPOJODataClassData
.因此,将您的 Retrofit 函数更改为:
@GET("switch")
fun getOutstandingOrderDetail(@Query("orderID") orderID: String): Call<OutstandingOrderDetailPOJODataClass>
关于android - Kotlin Retrofit response.body() 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62215683/