在 Android 的 SDK,cn.leancloud:storage-android 中存在一个BUG如下
BUG原因:
如果使用AVQuery查询,且写 query.includeACL(true); 增加获取对象的 ACL 值
如果,我们设置了缓存
如果,我们设置了缓存
如果,我们设置了缓存
那么,执行清除该缓存,query.clearCachedResult(),永远是无效的
因为,得到的 String cacheKey = QueryResultCache.generateKeyForQueryCondition(getClassName(), query),cacheKey 和 请求时缓存的cacheKey 不一致,永远无法自己清除缓存。
解决BUG。
包 cn.leancloud.AVQuery;里
protected Observable> findInBackground(int explicitLimit) {
Map query = assembleParameters();
if (this.includeACL && null != query) {
query.put("returnACL", "true");
}
.......
}
把这里的
if (this.includeACL && null != query) {
query.put("returnACL", "true");
}
迁移至assembleParameters方法里。
修改后如下
public Map assembleParameters() {
conditions.assembleParameters();
Map query = conditions.getParameters();
if (this.includeACL && null != query) {
query.put("returnACL", "true");
}
return query;
}
这样,缓存的cacheKey和我们自己清理缓存的cacheKey是一直的,才能自己清除缓存。