2013-12-12 67 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文件夹在您的模拟器上执行代码后。