首页 > 解决方案 > 如何将模型/POJO 与 android 数据绑定、房间和改造一起使用?

问题描述

我正在研究 android 中的 Room 和 Databinding,我向我的朋友展示了我在那一刻之前所做的事情,然后他说我的模型/POJO 类没有遵循最佳实践,因为我不应该使用相同的模型/POJO执行请求(改造),保存在数据库(房间)中并进行数据绑定。

我的模型/POJO:

@Entity(tableName = "posts")
class Post : BaseObservable() {

@ColumnInfo(name = "idPost")
@PrimaryKey
var id: Int = 0

var userId: Int = 0

@Bindable
var message: String = ""
    set(value) {
        field = value
        notifyPropertyChanged(BR.message)
    }

@SerializedName("created_in")
@Bindable
var createdIn: Long = 0
    set(value) {
        field = value
        notifyPropertyChanged(BR.createdIn)
    }

@Bindable
var image: String? = ""
    set(value) {
        field = value
        notifyPropertyChanged(BR.image)
    }

}

当我提出请求并保存在数据库中时

fun getPostsFromAPI(onSuccess: (posts: MutableList<Post>) -> Unit, onError: (error: Throwable) -> Unit) {

    PostsNetwork.requestPosts(
            { posts ->

                launch {
                    withContext(Dispatchers.IO) {
                        MyApplication.database.postsDAO().insertPosts(posts)
                    }
                    onSuccess(posts)

                }
            },
            {
                onError(it)
            }
    )

}

通过数据绑定,我试图使用两种方式的数据绑定。

我是否必须为每件事(数据绑定、改造、房间)提供 3 个实体?如果是这样,最好的方法是什么?

标签: androiddata-bindingretrofitandroid-roomandroid-databinding

解决方案


我将首先在您的域包中创建一个域模型 pojo,例如在清洁架构和数据传输对象模型中,以便在各个包中进行改造、房间等。然后转换对象使用带有函数的 Mapper 类,该函数接受一个对象并转换为另一个对象。


推荐阅读