【发布时间】:2020-06-06 13:52:39
【问题描述】:
使用 Retrofit,我只是成功地从端点调用 GET 请求。它在response.body() 中返回正确的响应。在Logcat中,就像this。
现在我想从response.body 中提取Header 属性并将它们传递给一些文本视图。正如你在上面看到的,它是一个单一的对象。
互联网上所有关于如何使用改造的例子都是使用它来填充回收视图。至于这个,它是一个单一的对象,我不想在列表视图或回收器视图中显示它们。
这是我想要展示的布局的 sn-p 代码(看起来像 this):
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginStart="32dp"
android:layout_marginTop="24dp">
<TextView
android:id="@+id/detailOutletName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="XXX"
android:textSize="16sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/detailOrderNumber"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="XXX"
android:textSize="16sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView3" />
<TextView
android:id="@+id/detailOrderDateTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="XXX"
android:textSize="16sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView3" />
<TextView
android:id="@+id/dtailOrderTotalPrice"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="XXX"
android:textSize="16sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView3" />
<TextView
android:id="@+id/detailCustomerName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="XXX"
android:textSize="16sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView3" />
<TextView
android:id="@+id/detailCustomerAddress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="XXX"
android:textSize="16sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView3" />
<TextView
android:id="@+id/detailCustomerPhone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="XXX"
android:textSize="16sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView3" />
</LinearLayout>
这是我使用的数据类:
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
)
这是来自布局片段的代码 sn-p:
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val args = arguments?.let { OrderDetailFragmentArgs.fromBundle(it) }
val selectedOrderId = args?.orderId
// Change action bar title
(activity as AppCompatActivity).supportActionBar?.title = "Order Details"
// View Binding for this Fragment
binding = DataBindingUtil.inflate(
inflater,
R.layout.fragment_order_detail, container, false
)
if (selectedOrderId != null) {
fetchOrderDetail(selectedOrderId)
fetchOrderedItemListData(selectedOrderId)
}
//Inflate layout to this activity fragment
return binding.root
}
private fun fetchOrderDetail(selectedOrderId : String){
NetworkConfig()
.getOutstandingDetailService()
.getOutstandingOrderDetail(selectedOrderId)
.enqueue(object :
Callback<OutstandingOrderDetailPOJODataClass>{
override fun onFailure(
call: Call<OutstandingOrderDetailPOJODataClass>,
t: Throwable
) {
....
}
override fun onResponse(
call: Call<OutstandingOrderDetailPOJODataClass>,
response: Response<OutstandingOrderDetailPOJODataClass>
) {
Log.i("Order", "Order Detail fetched! -> \n ${response.body()}") //This line is how the response.body() shown in the logcat.
}
})
}
有没有办法做到这一点?如果有任何我想指出的细节,请随时询问。
【问题讨论】:
-
在日志里面请像这样
response.body().data?.header试试看 -
@satuser 所以我需要做的就是使用
response.body().data?.header.attributeName访问每个属性? -
@satuser 它正在工作!非常感谢伙计。我建议您写下答案,以便将来对其他用户有所帮助。