Moshi + Firebase + JsonObject - PullRequest
       13

Moshi + Firebase + JsonObject

0 голосов
/ 03 апреля 2020

Я установил Firebase для простой структуры: {"id": {"fieldname": field}}

Я получаю данные из Firebase в форме JsonObject.

Каждый раз, когда я получаю данные, идентификатор отличается, обычно что-то вроде: "-M234567890-breubube8".

Если я использую Gson конвертер с модификацией, данные возвращаются хорошо, но если я пытаюсь конвертировать Moshi, JsonObject не может выполнить синтаксический анализ.

Есть ли способ обойти эту проблему?

// MOSHI-way

/* MOSHI retrofit builder*/
[...excluded...].addConverterFactory(MoshiConverterFactory.create()).build()

/* MOSHI retrofit api services */
@GET(FIREBASE_RETROFIT_ENDPOINT)
    fun getAnAccount(
        @Query(QUERY_CLAUSE_ORDERBY) orderBy : String
        , @Query(QUERY_CLAUSE_STARTAT) startAt : String
        , @Query(QUERY_CLAUSE_ENDAT) endAt : String
    ): Call<ResponseWrapper>

/* MOSHI response routine */
override fun onResponse(call: Call<ResponseWrapper>, response: Response<ResponseWrapper>) {
 println(response) 
}

/* MOSHI definition */
@JsonClass(generateAdapter = true)
data class ResponseWrapper(
    @field: Json(name="") var mKey: JsonObject? = null //this will fail <---
) 

/* MOSHI definition  */
@JsonClass(generateAdapter = true)
data class AccountWrapper(
    @field: Json(name = FIREBASE_ACCOUNT_FIELDNAME_TAG) var fieldname: String =  ""
)

// GSON-way

/* GSON retrofit builder */
[...excluded...].addConverterFactory(GsonConverterFactory.create()).build()

/* GSON retrofit api services */
@GET(FIREBASE_RETROFIT_ENDPOINT)
    fun getAnAccount(
        @Query(QUERY_CLAUSE_ORDERBY) orderBy : String
        , @Query(QUERY_CLAUSE_STARTAT) startAt : String
        , @Query(QUERY_CLAUSE_ENDAT) endAt : String
    ): Call<JsonObject>

/* GSON response routine */
override fun onResponse(call: Call<JsonObject>, response: Response<JsonObject>) {
 println(response) 
}

/* GSON definition */
data class ResponseWrapper(
    var mKey: JsonObject? = null
)

/* GSON definition  */
@JsonClass(generateAdapter = true)
data class AccountWrapper(
    @field: Json(name = FIREBASE_ACCOUNT_FIELDNAME_TAG) var fieldname: String =  ""
)
...