2015-09-29 52 views
1

我正在使用rushorm進行sqlite對象序列化和存儲。到目前爲止它的工作非常酷。問題是,我wan't存儲以下Request對象:RushORM商店RequestParams

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我做了一個子類,並使其實現拉什按照文檔的說明:

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); 

我確實接收存儲Request對象,適當url,但是RequestParamsStorable是空的(「」)。我檢查過,當我保存它們時,它們定義了值,並且不是空的。

所以問題是我錯了?

問候,

+1

RequestParams對象是否正在擴展? https://github.com/loopj/android-async-http/blob/master/library/src/main/java/com/loopj/android/http/RequestParams.java –

+0

是的。我理解了最終的問題並試圖用JSONObject來解決這個問題。 –

回答

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++; 
       } 
      } 
     } 
    } 

您應該刪除最終修改字段或創建將被保存在包裝對象db然後從它恢復RequestParams

0

好的問題確實是字段聲明爲final在RequestParams中。 @Stuart Campbell正確指出RequestParams參考。現在我試圖解決的一個問題是將所有屬性(除了Wrappers之外)存儲爲JSONObject,將此JSONObject存儲爲String,然後從中恢復狀態。我遇到了JsonWritter的一些問題,但尚未解決我的問題。不確定在這裏發佈相關的代碼是否是一個好主意,或者發佈新的問題?

+0

看看這個http://www.rushorm.com/advanced.html#Customise 你可以爲RequestParams創建一個自定義的列類型,並在那裏進行序列化和反序列化。 –