2013-12-12 63 views
1

我無法緩存來自Parse.com的數據。緩存與分析服務

我一直在閱讀Parse API for caching,但我仍然無法理解它。我該如何提取數據和緩存?

query.setCachePolicy(ParseQuery.CachePolicy.NETWORK_ELSE_CACHE); 
query.findInBackground(new FindCallback<ParseObject>() { 
public void done(List<ParseObject> scoreList, ParseException e) { 
    if (e == null) { 
    // Results were successfully found, looking first on the 
    // network and then on disk. 
    } else { 
    // The network was inaccessible and we have no cached data 
    // for this query. 
} 
}); 
+0

嗨,你解決了這個問題嗎?我也一樣。 – Aashir

回答

2

如果您指定CachePolicy,則數據將自動緩存在內部存儲上。默認的是CachePolicy.IGNORE_CACHE,所以沒有數據被緩存。由於您有興趣從緩存中獲取結果,因此使用CachePolicy.CACHE_ELSE_NETWORK會更有意義,因此查詢將首先在緩存中查找。您正在查找的數據將存儲在變量scoreList中。

也許你很難理解你的代碼是如何工作的,因爲你使用的是回調(因爲findinBackground())。請看下面的代碼:

ParseQuery<Person> personParseQuery = new ParseQuery<Person>(Person.class); 
personParseQuery.setCachePolicy(ParseQuery.CachePolicy.CACHE_ELSE_NETWORK); 
personParseQuery.addAscendingOrder("sort_order"); 
List<Person> = personParseQuery.find(); 

正如你所看到的,查詢的結果是由find()方法的返回。從Parse API文檔: public List<T> find() throws ParseException - 檢索滿足此查詢的ParseObjects的列表。根據緩存策略使用網絡和/或緩存。

Person類可能是這樣的:

@ParseClassName("Person") 
public class Person extends ParseObject { 

    public Person(){} 

    public String getPersonName() { 
     return getString("personName"); 
    } 

    public void setPersonName(String personName) { 
     put("personName",personName); 
    } 
} 

,當然還有,別忘了先初始化解析和註冊Person類:

Parse.initialize(this, "appID", "clientID"); 
ParseObject.registerSubclass(Person.class); 

我希望我的解釋能幫你。

PS:通過查看data.data中的內容可以看到數據緩存。您的應用程序包+名稱.cache.com.parse文件夾在您的模擬器上執行代碼後。