使用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
答案 0 :(得分:0)
我想将Object转换为多个原始类型。
这是不可能的。在您的代码中,包括您在内的任何人都不知道将Object
转换为:boolean
的内容是什么? int
?一个String
?别的什么?
最佳解决方案是删除对Object
的所有引用,并修复RPC序列化以使用更具体的类型。房间本身完全有能力处理boolean
,int
和String
。
下一个最佳解决方案是不要让您的RPC响应为@Entity
。毕竟,不要求您的RPC结果是始终可以由单个SQLite表表示的内容。将RPC响应视为DTO,并将Room实体视为单独的DTO。然后,您的Room实体不需要担心来自RPC的奇怪的Object
响应。
下一个次优解决方案是每种数据类型具有不同的@TypeConverter
类(一个用于boolean
,一个用于String
,一个用于int
),以及在您的实体中按字段应用@TypeConverters
,因此您需要指定要用于每个字段的特定类型转换器。