Можно ли использовать один и тот же ключ с другим классом и типом данных в классе данных kotlin android? - PullRequest
1 голос
/ 19 марта 2019

У меня есть одна проблема с кодом класс данных kotlin android.

Как реализовать ответ сервера?иногда я получаю String значение или иногда получаю Object класс.

class CMSRespTemp {

    data class CMSRespApi(
        val status: Boolean = false,
        val message: String = "",
        val data: String as Data
    )

    data class Data(
        val cms_id: String = "",
        val cms_content: String = ""
    )
}

Когда я реализую только класс Data, он работает, как этот val data: Data или val data: String.Но мне нужно вместе Data и String с данными только ключа.

Возможно ли это?

Ответы [ 2 ]

1 голос
/ 20 марта 2019

После 12 часов, потраченных на мое решение,

 val getResultCon = getSerCont.result // response Any
 val gson = Gson()
 val jsonElement = gson.toJsonTree(getResultCon)
 val resultData = gson.fromJson(jsonElement, SearchContactApi.Result::class.java)

Преобразуйте строку данных в toJsonTree и fromJson с классом модели, затем получите результат.

0 голосов
/ 19 марта 2019

При наличии нескольких типов для одной и той же переменной мы можем использовать тип Any, который эквивалентен типу Object в java.Таким образом, решение выглядит следующим образом:

class CMSRespTemp {

    data class CMSRespApi(
        val status: Boolean = false,
        val message: String = "",
        var data: Any? = null // changed it to var from val, so that we can change it's type runtime if required
    )

    data class Data(
        val cms_id: String = "",
        val cms_content: String = ""
    )
}

И когда вы получаете доступ к этой переменной, можно просто разыграть как ниже:

val apiResponse : CMSRespApi //= some API response here from network call
when (apiResponse.data) {
    is String -> {
        // apiResponse.data will be smart-casted to String here
    }
    else -> {
        val responseData = Gson().fromJson<CMSRespApi.Data>(
            Gson().toJsonTree(apiResponse.data),
            CMSRespApi.Data::class.java
        )
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...