レトロフィットのコンバーターとしてMoshiを使用していますが、特定のリクエストに対してMoshiが機能せず、例外がスローされます。
com.squareup.moshi.JsonDataException:BEGIN_OBJECTが必要ですが、パス$ .animauxでBEGIN_ARRAYでした
これがJsonです
"nb_animaux":1、 "animaux":[ { "code_iso": "768010103010004"、 "photos":[]、 "espece":{ "id":1、 "fr": "Bovin"、 "en": "Bovine" }、 "elevage":{ "parametre_geographique":{ "prefecture": "Oti"、 "region": "Savane"、 "commune": "Mango"、 "pays":{ "fr": "TOGO"、 "en": "TOGO" }、 "village": "Fonboro" }、 "type_elevage":{}、 "code_elevage": "76801010301" }、 "sexe": "m"、 "date_naissance":1561932000、 "category":{ "fr": "Taureau"、 "en": "Bull" }、 "proprietaire":{ "ID":10、 "フルネーム": "EDEM"、 "住所": "ロメ"、 "電話": "98665478" } } ]、 "num_transport": "1/11/2019 / TG"、 "date_transport":1574784132、 "traite":false }
私のモデルクラス
@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>
が、うまくいきませんでした。
JSONには、Animaux
1つだけではなく、のリストがあります。したがって、必要なのはvar animaux: List[Animaux]
、だけではありませんAnimaux
。
モデルクラスにどのように実装しますか。このエラーエラーが発生するので、その方法を教えてください。
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
Roomはそのようなフィールドを直接サポートしていません。技術的には機能させることができますが(Androidルームの永続ライブラリへの回答-リストオブジェクトフィールドを持つクラスを挿入する方法を参照)、データは間違いなく複雑なので、JSONとJSONの両方に単一のクラスを使用しようとはしませんルーム; 非常に正規化されていないデータベースになってしまいます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加