Вот обходной путь ... Создайте новый класс: обратитесь к этому
data class UserMap(
val _id: String,
val mobile_num: String,
val is_validated: Boolean,
val is_activated: Boolean,
val gender: String
){
object ModelMapper {
fun from(user: User) =
UserMap(user.uid,user.mobNum, user.isValidated, user.isActivated, user.gender)}
Используйте этот сопоставитель (просто создайте с ним файл kt), чтобы сопоставить класс UserMap с Map : ссылайтесь на это
val gson = Gson()
//convert a data class to a map
fun <T> T.serializeToMap(): Map<String, Any> {
return convert()
}
//convert a map to a data class
inline fun <reified T> Map<String, Any>.toDataClass(): T {
return convert()
}
//convert an object of type I to type O
inline fun <I, reified O> I.convert(): O {
val json = gson.toJson(this)
return gson.fromJson(json, object : TypeToken<O>() {}.type)
}
Затем используйте это где-нибудь, где вы хотите передать данные:
val userMap = UserMap.ModelMapper.from(User).serializeToMap()
Теперь передайте userMap в интерфейс:
@JvmSuppressWildcards
internal interface MatchesApi {
@POST("update/profile")
@FormUrlEncoded
fun updatePending(
@FieldMap userMap: Map<String, Any>
):Call<ResponseClass>
}
Не забудьте добавить аннотацию @JvmSuppressWildcards
, иначе получите retrofit2 throws parameterError(Parameter type must not include a type variable or wildcard)
Ошибка. Удачи.