2013-12-12 3 views
1

У меня возникли проблемы с попыткой кэширования данных с Parse.com.Кэширование с помощью службы parse

Я читал 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(). Из документации API Parse: 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 на вашем эмуляторе после выполнения кода.

Смежные вопросы