android - Kotlin Retrofit response.body() 返回 null

标签 android kotlin retrofit

所以我正在尝试使用端点 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/

相关文章:

android - 在 Android 应用程序中设置 zxing 2.0 条码扫描器

java - 使用Kotlin在子类中强制执行静态方法编译?

android - Gzip 解压缩时内存不足

android studio构建崩溃

显示下一个 child 提示的 Android View Pager

spring - 无法使用 Spring Boot、JUnit5 和 Kotlin 加载带有 @TestPropertySource 的 test-properties.yaml 文件

java - 创建 pojo 类和回调以进行改造

java - 使用 Retrofit 2 重试请求

android - SQLiteStatement 执行 SELECT/INSERT/DELETE/UPDATE

android - Jetpack 撰写错误(java.lang.NoSuchMethodError : No interface method startRestartGroup )