Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.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
Android RushORM存储请求参数_Android_Android Sqlite_Rushorm - Fatal编程技术网

Android RushORM存储请求参数

Android RushORM存储请求参数,android,android-sqlite,rushorm,Android,Android Sqlite,Rushorm,我正在使用sqlite对象序列化和存储。到目前为止,它的工作相当酷。问题是我不想存储以下请求对象: public class Request extends RushObject { private String url; private RequestParamsStorable params; public Request() {} public Request(String aUrl, RequestParamsStorable aParams)

我正在使用sqlite对象序列化和存储。到目前为止,它的工作相当酷。问题是我不想存储以下
请求
对象:

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); }
}
它没有抛出任何错误,对
Request
对象调用
save()。当我要求这样的存储对象时:

    List<Request> remainingsInDB = new RushSearch().find(Request.class);
List remainingsInDB=new-RushSearch().find(Request.class);
我确实接收到存储的
Request
对象,带有正确的
url
,但是
requestparamstorable
为空(“”)。我检查并保存它们时,它们肯定有值,并且不是空的

所以问题是我错在哪里


关于,

如果您的父类RequestParams包含声明为final的字段,它们将不会被还原

作为参考,您可以查看RushORM源代码

ReflectionClassLoader.java

for(字段:字段){
字段。setAccessible(true);
如果(!annotationCache.get(clazz).getFieldToIgnore()包含(field.getName()){
if(!loadJoinField(对象、列、注释缓存、字段、联接、joinTables)){
if(rushColumns.supportsField(字段)){
字符串值=values.get(计数器);
如果(value!=null&!value.equals(“null”)){
设置字段(对象、字段、值);
}
计数器++;
}
}
}
}

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

好的,问题确实是RequestParams中声明为
final
的字段@斯图尔特·坎贝尔恰当地指出了参考文献。现在我尝试的解决方法是将所有属性(包装器除外)存储为
JSONObject
,将此
JSONObject
存储为
String
,然后从中恢复状态。我在使用
jsonwriter
时遇到了一些问题,但还没有解决我的问题。不确定在这里发布相关代码还是发布新问题是个好主意?

您是在扩展RequestParams对象吗?是的。我理解
final
问题,并试图解决JSONObject的问题。看看这个,您可以为RequestParams创建一个自定义列类型,并在那里进行序列化和反序列化。