【发布时间】:2020-03-23 12:26:20
【问题描述】:
我正在使用 Moshi 作为 Retrofit 的转换器,但对于一个特定的请求它不起作用并引发异常:
com.squareup.moshi.JsonDataException:预期为 BEGIN_OBJECT,但在路径 $.animaux 处为 BEGIN_ARRAY
这是 Json
"nb_animaux": 1,
“动画”:[
{
"code_iso": "768010103010004",
“相片”: [],
“espece”:{
“身份证”:1,
“fr”:“牛”,
"zh": "牛"
},
“高度”:{
“参数地理”:{
“县”:“奥蒂”,
“地区”:“萨凡”,
“公社”:“芒果”,
“支付”:{
"fr": "多哥",
"zh": "多哥"
},
“村庄”:“丰博罗”
},
“type_elevage”:{},
“code_elevage”:“76801010301”
},
“性别”:“米”,
"date_naissance": 1561932000,
“类别”: {
"fr": "金牛座",
"zh": "公牛"
},
“业主”:{
“身份证”:10,
“全名”:“edem”,
“地址”:“洛美”,
“电话”:“98665478”
}
}
],
"num_transport": "1/11/2019/TG",
“日期运输”:1574784132,
“特质”:假
}
我的模型课
@Entity
data class Animal(
@field:PrimaryKey
var id: Long,
@ColumnInfo(name = "nb_animaux")
@Json(name = "nb_animaux")
var nbAnimaux : Int,
@Embedded
@get:Json(name = "animaux")
var animaux : Animaux,
@ColumnInfo(name = "num_transport")
@Json(name = "num_transport")
var numeroTransport : String,
@ColumnInfo(name = "date_transport")
@Json(name = "date_transport")
var dateTransport : Long,
var traite: Boolean
)
@JsonClass(generateAdapter = true)
data class Animaux(
@ColumnInfo(name = "animaux_id")
var id : Long,
@ColumnInfo(name = "code_iso")
@Json(name = "code_iso")
var codeIso : Long,
@Embedded
var espece : Espece,
@Embedded
var elevage : Elevage,
var sexe : String,
@ColumnInfo(name = "date_naisance")
@Json(name = "date_naisance")
var dateNaissance : Long,
@ColumnInfo(name = "race_pere")
@Json(name = "race_pere")
var racePere: String,
@ColumnInfo(name = "race_mere")
@Json(name = "race_mere")
var raceMere: String,
@Embedded
var category: Category,
@Embedded
var proprietaire: Proprietaire
)
/*{
constructor() : this(0, 0, Espece(0,"",""), Elevage(0, ParametreGeographique("","","",
Country("",""),""
),0), "", 0, "", "", Category(0,"",""),Proprietaire
(0,"","","",""))
}
*/
data class Espece(
@ColumnInfo(name = "id_espece")
@Json(name = "id_espece")
var id: Long,
var fr : String,
var en : String
)
data class Elevage(
@ColumnInfo(name = "id_elevage")
@Json(name = "id_elevage")
var id: Long,
@Embedded
var parametregeographique: ParametreGeographique,
@ColumnInfo(name = "code_elevage")
@Json(name = "code_elevage")
var codeElevage : Long
)
data class ParametreGeographique(
var prefecture : String,
var region : String,
var commune : String,
@Embedded
var pays : Country,
var village : String
)
data class Country(
@ColumnInfo(name = "fr_pays")
@Json(name = "fr_pays")
var fr : String,
@ColumnInfo(name = "en_pays")
@Json(name = "en_pays")
var en : String
)
data class Category (
@ColumnInfo(name = "id_category")
var id: Long,
@ColumnInfo(name = "fr_category")
var fr : String,
@ColumnInfo(name = "en_category")
var en : String
)
data class Proprietaire(
@ColumnInfo(name = "id_proprietaire")
var id: Long,
var fullname : String,
var telephone : String,
@ColumnInfo(name = "telephone_second")
var telephoneSecond : String,
@ColumnInfo(name = "photo_profile")
var photoProfil : String
)
改造电话
@GET("marche-betail/transport/{id}")
fun commandesDetailFromServer(@Path("id") id: Long?): Observable<Animal>
我该如何处理错误。我尝试对Animaux 类使用构造函数,但出现错误。我也用了list<Animaux>,但是没用。
【问题讨论】:
-
“我也使用了列表,但它不起作用。”你的意思是
var animaux: List<Animaux>而不是Animaux?看起来它应该对我有用,或者如果它不起作用,那是另一个错误。 -
如何在模型类中实现。你能告诉我怎么做吗,因为当我尝试我得到这个错误
error: Entities and POJOs must have a usable public constructor. You can have an empty constructor or a constructor whose parameters match the fields (by name and type). - java.util.List
标签: android kotlin retrofit moshi