我正在使用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/

10-09 01:32