我正在使用rushorm进行sqlite对象的序列化和存储。到目前为止,它的工作还不错。问题是我不想存储以下Request
对象:
public class Request extends RushObject {
private String url;
private RequestParamsStorable params;
public Request() {}
public Request(String aUrl, RequestParamsStorable aParams)
{
this.url = aUrl;
this.params = aParams;
}
public String getUrl()
{
return this.url;
}
public RequestParams getParams()
{
return this.params;
}
}
如您所见,我需要存储RequestParams对象。为了存储它,我显然无法使其扩展
RushObject
,所以我创建了一个子类并使其按照docs指令实现Rush:public class RequestParamsStorable extends RequestParams implements Rush {
public RequestParamsStorable() {}
@Override
public void save() { RushCore.getInstance().save(this); }
@Override
public void save(RushCallback callback) { RushCore.getInstance().save(this, callback); }
@Override
public void delete() { RushCore.getInstance().delete(this); }
@Override
public void delete(RushCallback callback) { RushCore.getInstance().delete(this, callback); }
@Override
public String getId() { return RushCore.getInstance().getId(this); }
}
它没有引发任何错误,并且在
save()
对象上调用Request
很顺利。当我要求这样的存储对象时: List<Request> remainingsInDB = new RushSearch().find(Request.class);
我确实收到了带有正确的
Request
的存储的url
对象,但是RequestParamsStorable
是empty(“”)。我检查了一下,并在保存时确定它们具有值,并且不为空。所以问题是我错了哪里?
问候,
最佳答案
如果您的父类RequestParams包含声明为final的字段,则将不会还原它们。
作为参考,您可以看到RushORM源代码
ReflectionClassLoader.java
for (Field field : fields) {
field.setAccessible(true);
if (!annotationCache.get(clazz).getFieldToIgnore().contains(field.getName())) {
if (!loadJoinField(object, rushColumns, annotationCache, field, joins, joinTables)) {
if(rushColumns.supportsField(field)) {
String value = values.get(counter);
if(value != null && !value.equals("null")) {
rushColumns.setField(object, field, value);
}
counter++;
}
}
}
}
您应该删除字段的最终修饰符,或者创建将存储在数据库中的包装对象,然后从中恢复RequestParams
关于android - RushORM商店RequestParams,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32851651/