RushORM商店RequestParams

时间:2015-09-29 18:51:57

标签: android android-sqlite rushorm

我正在使用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我创建了一个子类并按照文档说明实现了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为空(“”)。我检查过,当我保存它们时,它们定义了值,并且不是空的。

所以问题是我错了吗?

问候,

2 个答案:

答案 0 :(得分:1)

如果您的父类 RequestParams 包含声明为最终的字段,则不会恢复它们。

作为参考,您可以看到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++;
                }
            }
        }
    }

您应该删除字段的 final 修饰符或创建将存储在数据库中的包装器对象,然后从中恢复RequestParams

答案 1 :(得分:0)

好的问题确实是RequestParams中声明为final的字段。 @Stuart Campbell正确地提到RequestParams参考。现在我尝试解决方法是将所有属性(Wrappers除外)存储为JSONObject,将此JSONObject存储为String,然后从中恢复状态。我在JsonWritter面临一些问题但尚未解决我的问题。不确定在这里发布相关代码或者发布新问题是不是一个好主意?