【问题标题】:how to make mutiple typeconverter for OBJECTS in room DB如何为房间数据库中的对象制作多个类型转换器
【发布时间】:2018-01-10 20:40:49
【问题描述】:

使用 JSON RPC 从 Odoo 服务器获取对象作为响应。我想将 Object 转换为多种原始类型。由于房间数据库不支持对象,因此必须进行此转换才能将数据保存在数据库中。谁能帮我在下面发布源代码

模型数据库创建:

@Entity(tableName = "ryot")

public class RyotMasterJsonRpcResult {
public Integer getIds() {
    return ids;
}

public void setIds(Integer ids) {
    this.ids = ids;
}

@PrimaryKey(autoGenerate = true)
private Integer ids;
@SerializedName("old_edit_by_id")
@Expose
@Ignore
private Object oldEditById = null;
@SerializedName("create_date")
@Expose
private Object createDate;
@SerializedName("ryot_number")
@Expose
private Object ryotNumber;
@SerializedName("display_name")
@Expose
private Object displayName;
public List<Object> getOldEditById() {
    if (oldEditById != null && !oldEditById.equals("false")) {
        return (List<Object>) oldEditById;
    }
    return null;

}

public void setOldEditById(List<Object> oldEditById) {
    this.oldEditById = oldEditById;
}

public Object getCreateDate() {
    return createDate;
}

public void setCreateDate(String createDate) {
    this.createDate = createDate;
}

public Object getRyotNumber() {
    return ryotNumber;
}

public void setRyotNumber(String ryotNumber) {
    this.ryotNumber = ryotNumber;
}

public Object getDisplayName() {
    return displayName;
}

public void setDisplayName(String displayName) {
    this.displayName = displayName;
}    

打字机转换器:

public class CommonConverter {


@TypeConverter
public static Object fromString(String value) {

    return value;
}

@TypeConverter
public static String toString(Object data) {
    return (String) data;
}
@TypeConverter
public static Object fromInt(Integer value) {

    return value;
}

@TypeConverter
public static Integer toInt(Object data) {

    return (Integer) data;
}
@TypeConverter
public static Object fromBoolean(Boolean value) {

    return value;
}

@TypeConverter
public static Boolean toBoolean(Object data) {
    return (Boolean)data;
}

}

得到错误为:

Error:(492, 29) error: incompatible types: Object cannot be converted to 
String
Error:(492, 29) error: incompatible types: Object cannot be converted to 
Boolean
Error:(492, 29) error: incompatible types: Object cannot be converted to 
integer

【问题讨论】:

    标签: android odoo-9 android-room android-architecture-components


    【解决方案1】:

    我想将 Object 转换为多种原始类型。

    这是不可能的。在您的代码中,包括您在内的任何人都不知道如何将 Object 转换为:booleanint? String?还有什么?

    最好的解决方案是删除所有对Object 的引用,并修复您的 RPC 序列化以使用更具体的类型。 Room 本身完全能够处理booleanintString

    下一个最佳解决方案是不要让您的 RPC 响应为 @Entity。毕竟,没有要求您的 RPC 结果是总是可以由单个 SQLite 表表示的东西。将 RPC 响应视为 DTO 并将 Room 实体视为单独的 DTO。然后,您的 Room 实体无需担心来自 RPC 的奇怪的 Object 响应。

    次佳解决方案是为每种数据类型设置不同的@TypeConverter 类(一个用于boolean,一个用于String,一个用于int),并在每个数据类型上应用@TypeConverters实体中的字段基础,因此您指定要用于每个字段的特定类型转换器。

    【讨论】:

    • 第三个解决方案我试过了,但我不知道响应是怎么来的,所以我只分配了一个对象。我为 Boolean 和 int 和 String 创建了通用类型转换器......我做什么
    • @Rajakrishnan:“我不知道响应是怎么来的”——这似乎是你问题的核心。解决这个问题是我在回答中所说的最佳解决方案。 “我在做什么”——与维护服务器的人交谈,并与他们一起提出更好的、完全指定的 RPC 协议。
    猜你喜欢
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-31
    • 2018-07-06
    相关资源
    最近更新 更多