我有一个包含产品类别的json文件。我正在尝试将生成的json文件转换为kotlin类,以便将来可以在recyclerview中显示生成的数据。我创建了必要的pojo类,在日志中我看到我从服务器获得了正确的数据。但当我试图从片段中记录数据时,我发现我的数据是空的。我怎样才能解决这个问题?json示例:
{
"beauty_health": [
{
"id": 1,
"brand": "Kaya Youth",
"category": "Beauty & Health",
"name": "Hydro Replenish Face Wash",
"description": "Hydro Replenish Face Wash, With Aloe Vera",
"price": 42,
"icon": ""
},
{
"id": 2,
"brand": "Kaya Youth",
"category": "Beauty & Health",
"name": "Oxy-Infusion Face Wash",
"description": "Kaya Youth Oxy-Infusion Face Wash,100",
"price": 18,
"icon": ""
}],
"electronics": [
{
"id": 1,
"brand": "OnePlus",
"category": "Electronics",
"name": "OnePlus 8",
"description": "OnePlus 8T 64GB",
"price": 250,
"icon": ""
},],
pojo类示例:
//productlist类
data class ProductList(
@SerializedName("beauty_health")
var beautyHealth: List<BeautyHealth>,
@SerializedName("electronics")
val electronics: List<Electronic>,
@SerializedName("fashion")
val fashion: List<Fashion>,
@SerializedName("image_slider")
val imageSlider: List<ImageSlider>,
@SerializedName("popular")
val popular: List<Popular>,
@SerializedName("sports")
val sports: List<Sport>) : Serializable
//美容保健课
data class BeautyHealth(
@SerializedName("brand")
val brand: String,
@SerializedName("category")
val category: String,
@SerializedName("description")
val description: String,
@SerializedName("icon")
val icon: String,
@SerializedName("id")
val id: Int,
@SerializedName("name")
var name: String,
@SerializedName("price")
val price: Int) : Serializable
我的存储库:
api.onFetchAllProducts().enqueue(object : Callback<ProductList> {
override fun onFailure(call: Call<ProductList>, t: Throwable) {
}
override fun onResponse(call: Call<ProductList>, response: Response<ProductList>) {
mutableLiveData.postValue(response.body())
}
})
return mutableLiveData
我的viewmodel:
fun onGetProductsList(): MutableLiveData<ProductList> {
return apiRepository.onLoadProducts()
}
还有我的片段:
mHomeViewModel.onGetProductsList().observe(viewLifecycleOwner, Observer { products ->
Log.d(TAG, "onCreateView: $products")
})
我的日志:
D/HomeFragment: onCreateView: null
1条答案
按热度按时间6ojccjat1#
如果你用的是kotlin的
data class
作为你的Gson
模型,则必须为所有属性提供默认值。在java中,所有对象都有默认的空值。如果选择使用kotlin数据类作为具有非null属性的模型,并且在json响应中缺少一个字段,则整个序列化将失败。
例如,尝试改变这一点:
收件人: