【问题标题】:Android - Populate values into already created POJO model object using retrofitAndroid - 使用改造将值填充到已创建的 POJO 模型对象中
【发布时间】:2019-06-04 06:49:18
【问题描述】:

我有一个 POJO 模型对象“apiResponse”,它具有来自先前 API 调用的值。

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

这个 apiResponse 有一个“UserModel”作为内部对象。

我想要做的是将这个“apiResponse”对象传递给另一个响应为“UserModel”的api调用,并让它只更新APIResponse POJO对象中的UserModel对象。

目标是保持相关内容的单一来源,这可能会根据应用程序中的交互而改变,但可能不会更新其余相关内容。

或者是否有可能至少更新一个已经创建的 pojo 模型作为一个整体,更新模型中的变量值。?

原因::

API 的内容在服务器中的一段时间内不会发生变化,主要是为了避免服务器的流量过大。因此,必须在应用程序端实现一些逻辑。目前使用数据库并不是一个真正可行的选择。

基本上只用另一个 api 调用更新已经创建的 POJO 类对象的一部分。

这在使用改造的 android(kotlin) 中是否可行?或者有没有其他方法可以实现?

【问题讨论】:

    标签: android kotlin retrofit2


    【解决方案1】:

    我认为使用Retrofit 填充现有UserModel 对象中的其他字段是不可能的,但您可以使用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)...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多