Android - введите значения в уже созданный объект модели POJO, используя модификацию - PullRequest
0 голосов
/ 03 июня 2019

У меня есть объект модели POJO "apiResponse", который имеет значения из предыдущего вызова API.

{
   "status":200,
   "userModel":{
                 ...SOME VARIABLES...
               },
   "otherContentRelatedToUserModel":{
                    ..SOME RELATED CONTENT..
                    }
}

Этот apiResponse имеет "UserModel" в качестве внутреннего объекта.

Что я хочу сделать - это передать этот объект "apiResponse" другому вызову API, ответ которого "UserModel", и заставить его обновить только объект UserModel в объекте APIResponse POJO.

Цель - сохранить единый источник связанного контента, который может меняться в зависимости от взаимодействия в приложении, но может не обновлять остальную часть связанного контента.

Или можно хотя бы обновить уже созданную модель pojo в целом, обновив значения переменных в модели .?

Причина этого ::

Содержимое API не изменяется в течение установленного промежутка времени на сервере, главным образом во избежание чрезмерного трафика на сервер. Таким образом, некоторое количество логики должно быть реализовано на стороне приложения. В настоящее время использование БД не является приемлемым вариантом.

В основном обновите только часть уже созданного объекта класса POJO с помощью другого вызова API.

Возможно ли это в Android (Kotlin) с помощью модернизации? Или есть какой-то другой способ, которым это может быть достигнуто?

1 Ответ

0 голосов
/ 04 июня 2019

Я думаю, что невозможно заполнить дополнительные поля в существующем объекте UserModel с помощью Retrofit, но вы можете творить чудеса с GSON:

data class UserModel(
        val userId: Int? = null,
        val userName: String? = null)

class OtherContentRelatedToUserModel

data class ApiResponsePojo(
        val status: Int? = null,
        val userModel: UserModel? = null,
        val otherContentRelatedToUserModel: OtherContentRelatedToUserModel? = null)

class UserModelInstanceCreator(var userModelToUpdate: UserModel? = null)
    : InstanceCreator<UserModel> {
    override fun createInstance(type: Type?): UserModel {
        return userModelToUpdate ?: UserModel()
    }
}

val apiResponseJson =
        """
            {
                "status":200,
                "userModel":{
                    "userId": 1
                },
                "otherContentRelatedToUserModel":{
                }
            }
        """

val userModelResponseJson =
        """
            {
                "userName": "john wick"
            }
        """

val userModelInstanceCreator = UserModelInstanceCreator()

val gson = GsonBuilder()
        .registerTypeAdapter(UserModel::class.java, userModelInstanceCreator)
        .create()

val apiResponse: ApiResponsePojo = gson.fromJson(apiResponseJson, ApiResponsePojo::class.java)
userModelInstanceCreator.userModelToUpdate = apiResponse.userModel
gson.fromJson(userModelResponseJson, UserModel::class.java)

...
// apiResponse.toString() result
// ApiResponsePojo(status=200, userModel=UserModel(userId=1, userName=john wick)...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...