Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sqlite 无法序列化自定义对象activeandroid_Sqlite_Serialization_Activeandroid - Fatal编程技术网

Sqlite 无法序列化自定义对象activeandroid

Sqlite 无法序列化自定义对象activeandroid,sqlite,serialization,activeandroid,Sqlite,Serialization,Activeandroid,我正在尝试将一些自定义对象作为blob存储在SqlLite数据库中。对象是类扩展模型的字段。所有其他字段(基元类型)在数据库中都成功运行,但自定义字段始终为空 @Table(name = "data") public class Data extends Model { @Column(name = "number") private int number; @Column(name = "blob") private Contact blob; ... 这就是我存储实体的方式 Data

我正在尝试将一些自定义对象作为blob存储在SqlLite数据库中。对象是类扩展模型的字段。所有其他字段(基元类型)在数据库中都成功运行,但自定义字段始终为空

@Table(name = "data")
public class Data extends Model {

@Column(name = "number")
private int number;

@Column(name = "blob")
private Contact blob;

...
这就是我存储实体的方式

Data data = new Data(0, new Contact(id, name, number));
data.save();
这是联络班

public class Contact {
private String id;
private String name;
private String number;

...
我认为需要一个类型序列化程序,所以我创建了一个

public class ContactSerializer extends TypeSerializer {

private static final String ELEMENTS_DELIMITER = ";";

@Override
public Object deserialize(Object asString) {
    String[] afterSplit = ((String) asString).split(ELEMENTS_DELIMITER);
    return new Contact(afterSplit[0], afterSplit[1], afterSplit[2]);
}

@Override
public Class<?> getDeserializedType() {
    return Contact.class;
}

@Override
public SerializedType getSerializedType() {
    return SerializedType.STRING;
}

@Override
public Object serialize(Object asContact) {
    Contact temp = (Contact) asContact;
    return temp.getId() + ELEMENTS_DELIMITER + temp.getName() + ELEMENTS_DELIMITER
            + temp.getNumber();
}
公共类ContactSerializer扩展了TypeSerializer{
私有静态最终字符串元素_DELIMITER=“;”;
@凌驾
公共对象反序列化(对象关联){
String[]afterplit=((String)asString.split(ELEMENTS_分隔符);
返回新触点(后裂[0]、后裂[1]、后裂[2]);
}
@凌驾
公共类getDeserializedType(){
返回Contact.class;
}
@凌驾
公共SerializedType getSerializedType(){
返回SerializedType.STRING;
}
@凌驾
公共对象序列化(对象关联){
触点温度=(触点)A触点;
返回temp.getId()+元素分隔符+temp.getName()+元素分隔符
+temp.getNumber();
}
}


当我查询数据库时,我得到了这个特定字段“Contact”始终为null的对象。问题出在哪里?我需要指定哪个是我的对象的TypeSerializer吗?或者我创建的TypeSerializer的实现是错误的?

您还需要扩展来自模型的联系人:

@Table(name = "contact")
public class Contact extends Model{
    @Column(name = "id")
    private String id;
    @Column(name = "name")
    private String name;
    @Column(name = "number")
    private String number;
}

现在一切都应该开箱即用。现在回复有点晚了,但也许我会帮助其他人。

嘿,你有没有弄明白这一点?