我檢查了我服務器的 HTTP Response 值,該值restaurant_isfav是t (rue)
{
"restaurant_average": "9",
"restaurant_isfav": "t",
"restaurant_id": "2",
"restaurant_address": "89 Rue Queen, QC J1M 1J5",
"restaurant_genre": "Fast Food",
"restaurant_lat": "45.3654632370656",
"restaurant_tel": " 18198237007",
"restaurant_name": "Tim Hortons",
"restaurant_long": "-71.85717677305372"
},
當涉及到我的客戶時,該值變為false
Restaurant (
restaurant_id=2,
restaurant_name=Tim Hortons,
restaurant_address=89 Rue Queen, QC J1M 1J5,
restaurant_genre=Fast Food,
restaurant_average=9.0,
restaurant_tel= 18198237007, restaurant_lat=45.365463,
restaurant_long=-71.85718,
restaurant_isfav=false
)
我實作了一個簡單的網路服務器,Java資料庫是Postgresql
這是相關的代碼: Gradle
implementation 'com.google.code.gson:gson:2.8.7'
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
ViewModel
class HomeViewModel : ViewModel() {
private val restaurants: MutableLiveData<List<Restaurant>> = MutableLiveData()
private val request = ServiceBuilder.ServiceBuilder.buildService(EndPointInterface::class.java)
private lateinit var call: Call<List<Restaurant>>
fun getRestaurant(): LiveData<List<Restaurant>> {
return restaurants
}
fun setRestaurant(id: Int, daoType: Int) {
call = request.getRestaurants(id, daoType)
call.enqueue(object : Callback<List<Restaurant>> {
override fun onResponse(
call: Call<List<Restaurant>>, response: Response<List<Restaurant>>
) {
if (response.isSuccessful) {
restaurants.postValue(response.body())
}
}
override fun onFailure(call: Call<List<Restaurant>>, t: Throwable) {
t.stackTrace
}
})
}
}
Restaurant
data class Restaurant (
val restaurant_id: Int,
val restaurant_name: String,
val restaurant_address: String,
val restaurant_genre: String,
val restaurant_average: Float,
val restaurant_tel: String,
val restaurant_lat: Float,
val restaurant_long: Float,
var restaurant_isfav: Boolean,
)
uj5u.com熱心網友回復:
它總是錯誤的,因為您的資料 "restaurant_isfav": "t",回傳t不正確并將其作為字串而不是布林值回傳,如果資料如下,您的代碼將起作用"restaurant_isfav": true,
要解決此問題,您可以將restaurant_isfav型別從布林值轉換為字串,然后檢查它是否t或f,
另一個解決方案是映射t到 TRUE 和fFALSE的列舉
enum class Favourite {
@SerializedName("t")
TRUE,
@SerializedName("f")
FALSE,
}
在餐廳課程中,您將擁有
var restaurant_isfav: Favourite,
當你檢查你會寫restaurant_isfav.TRUEor restaurant_isfav.FALSE,但如果你想得到布林值,你可以這樣寫
enum class Favourite(val boolValue: Boolean) {
@SerializedName("t")
TRUE(true),
@SerializedName("f")
FALSE(false),
}
你可以得到這樣的布林值 restaurant_isfav.TRUE.boolValue
不要忘記添加com.squareup.retrofit2:converter-scalars到您的專案中
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/380148.html
標籤:安卓 json PostgreSQL的 改造2
