данные кэшируются автоматически на внутренней памяти, если вы укажете 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 на вашем эмуляторе после выполнения кода.
Привет, вы решили эту проблему? У меня то же самое. – Aashir