package org.aisen.weibo.sina.support.cache; import java.io.File; import java.io.Serializable; import java.util.List; import org.aisen.weibo.sina.support.utils.AppContext; import org.aisen.weibo.sina.support.utils.AppSettings; import org.aisen.weibo.sina.support.utils.CacheTimeUtils; import org.sina.android.bean.Favorities; import org.sina.android.bean.Favority; import com.m.common.context.GlobalContext; import com.m.common.params.Params; import com.m.common.settings.Setting; import com.m.common.utils.FileUtility; import com.m.common.utils.Logger; import com.m.support.bizlogic.ABaseBizlogic; import com.m.support.cache.ICacheUtility; import com.m.support.task.TaskException; import com.m.support.task.WorkTask; public class FavoritesCacheUtility implements ICacheUtility { static final String TAG = ABaseBizlogic.TAG; private Favorities getCache() throws Exception { File favoritesFile = getCacheFile(); return FileUtility.readObject(favoritesFile, Favorities.class); } private File getCacheFile() { File extenrnalDir = new File(GlobalContext.getInstance().getDataPath()); Logger.v(TAG, String.format("缓存目录 = %s", extenrnalDir.getAbsolutePath())); File favoritesFile = new File(String.format("%s%s%s-favorites.o", extenrnalDir.getAbsolutePath(), File.separator, AppContext.getUser().getIdstr())); return favoritesFile; } @SuppressWarnings({ "unchecked", "rawtypes" }) @Override public <T> Cache<T> findCacheData(Setting action, Params params, Class<T> responseCls) { if (AppSettings.isDisableCache()) return null; if (!AppContext.isLogedin()) return null; try { long time = System.currentTimeMillis(); Favorities favorities = getCache(); if (favorities != null) { Logger.w(TAG, String.format("读取收藏数据,共耗时%sms", String.valueOf(System.currentTimeMillis() - time))); favorities.setExpired(CacheTimeUtils.isExpired("Favorites", AppContext.getUser())); return new Cache((T) favorities, false); } } catch (Exception e) { e.printStackTrace(); } return null; } @Override public void addCacheData(Setting action, Params params, Object responseObj) { if (!AppContext.isLogedin()) return; try { int page = Integer.parseInt(params.getParameter("page")); Favorities favorities = (Favorities) responseObj; // 如果是第一页,就重置数据,否则,将数据添加到集合末尾 if (page > 1) { Cache<Favorities> c = findCacheData(action, params, Favorities.class); Favorities cache = c.getT(); if (cache != null) { Favorities cacheFavorities = cache; List<Favority> statusList = cacheFavorities.getFavorites(); statusList.addAll(favorities.getFavorites()); favorities.setFavorites(statusList); } } // 加载第一页的时候,保存缓存的时间 else { CacheTimeUtils.saveTime("Favorites", AppContext.getUser()); } favorities.setExpired(false); favorities.setCache(true); Logger.d(TAG, String.format("加载了%d条数据,总共%d条", favorities.getFavorites().size(), favorities.getTotal_number())); long time = System.currentTimeMillis(); FileUtility.writeObject(getCacheFile(), (Serializable) responseObj); Logger.w(TAG, String.format("保存收藏数据,共耗时%sms", String.valueOf(System.currentTimeMillis() - time))); } catch (Exception e) { e.printStackTrace(); } } /** * 删除一条收藏 * * @param statudId */ public static void destory(String statudId) { new WorkTask<String, Void, Void>() { @Override public Void workInBackground(String... params) throws TaskException { try { FavoritesCacheUtility cacheUtility = new FavoritesCacheUtility(); Favorities favorities = cacheUtility.getCache(); if (favorities != null) { for (Favority favority : favorities.getFavorites()) { if (favority.getStatus().getId().equals(params[0])) { favorities.getFavorites().remove(favority); int total = favorities.getTotal_number() - 1; favorities.setTotal_number(total <= 0 ? 0 : total); Logger.d(TAG, "删除一条收藏"); break; } } } long time = System.currentTimeMillis(); FileUtility.writeObject(cacheUtility.getCacheFile(), favorities); Logger.w(TAG, String.format("保存收藏数据,共耗时%sms", String.valueOf(System.currentTimeMillis() - time))); } catch (Exception e) { } return null; } }.executeOnSerialExecutor(statudId); } }