如何在室内DB中为OBJECTS制作多个typeconverter

时间:2018-01-10 12:32:55

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

使用JSON RPC将对象作为Odoo服务器的响应。我想将Object转换为多个原始类型。由于会议室数据库不支持对象,因此必须进行此转换以将数据保存在数据库中。任何人都可以帮我发布下面的源代码

模型Db创建:

@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;
}    

Typer转换器:

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

1 个答案:

答案 0 :(得分:0)

  

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

这是不可能的。在您的代码中,包括您在内的任何人都不知道将Object转换为:boolean的内容是什么? int?一个String?别的什么?

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

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

下一个次优解决方案是每种数据类型具有不同的@TypeConverter类(一个用于boolean,一个用于String,一个用于int),以及在您的实体中按字段应用@TypeConverters,因此您需要指定要用于每个字段的特定类型转换器。