我有一个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)中可能吗?还是有其他方法可以实现?
答案 0 :(得分:0)
我认为无法使用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)...