/* * Copyright 2017 GcsSloop * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * Last modified 2017-03-12 02:50:16 * * GitHub: https://github.com/GcsSloop * Website: http://www.gcssloop.com * Weibo: http://weibo.com/GcsSloop */ package com.gcssloop.diycode.utils; import android.content.Context; import android.support.annotation.NonNull; import android.util.LruCache; import com.gcssloop.diycode_sdk.api.news.bean.New; import com.gcssloop.diycode_sdk.api.sites.bean.Sites; import com.gcssloop.diycode_sdk.api.topic.bean.TopicContent; import com.gcssloop.diycode_sdk.api.topic.bean.TopicReply; import com.gcssloop.diycode_sdk.api.user.bean.UserDetail; import com.gcssloop.diycode_sdk.utils.ACache; import java.io.File; import java.io.Serializable; import java.util.ArrayList; import java.util.List; /** * 数据缓存工具 */ public class DataCache { private static int M = 1024 * 1024; ACache mDiskCache; LruCache<String, Object> mLruCache; public DataCache(Context context) { mDiskCache = ACache.get(new File(FileUtil.getExternalCacheDir(context.getApplicationContext(), "diy-data"))); mLruCache = new LruCache<>(5 * M); } public <T extends Serializable> void saveListData(String key, List<T> data) { ArrayList<T> datas = (ArrayList<T>) data; mLruCache.put(key, datas); mDiskCache.put(key, datas, ACache.TIME_WEEK); // 数据缓存时间为 1 周 } public <T extends Serializable> void saveData(@NonNull String key, @NonNull T data) { mLruCache.put(key, data); mDiskCache.put(key, data, ACache.TIME_WEEK); // 数据缓存时间为 1 周 } public <T extends Serializable> T getData(@NonNull String key) { T result = (T) mLruCache.get(key); if (result == null) { result = (T) mDiskCache.getAsObject(key); if (result != null) { mLruCache.put(key, result); } } return result; } public void removeDate(String key) { mDiskCache.remove(key); } public void saveTopicContent(TopicContent content) { saveData("topic_content_" + content.getId(), content); String preview = HtmlUtil.Html2Text(content.getBody_html()); if (preview.length() > 100) { preview = preview.substring(0, 100); } saveData("topic_content_preview" + content.getId(), preview); } public TopicContent getTopicContent(int id) { return getData("topic_content_" + id); } public String getTopicPreview(int id) { String key = "topic_content_preview" + id; return getData(key); } public void saveTopicRepliesList(int topic_id, List<TopicReply> replyList) { ArrayList<TopicReply> replies = new ArrayList<>(replyList); saveData("topic_reply_" + topic_id, replies); } public List<TopicReply> getTopicRepliesList(int topic_id) { return getData("topic_reply_" + topic_id); } public void saveTopicsListObj(List<Object> topicList) { ArrayList<Object> topics = new ArrayList<>(topicList); saveData("topic_list_obj_", topics); } public List<Object> getTopicsListObj() { return getData("topic_list_obj_"); } public void saveNewsList(List<New> newList) { ArrayList<New> news = new ArrayList<>(newList); saveData("news_list_", news); } public List<New> getNewsList() { return getData("news_list_"); } public void saveNewsListObj(List<Object> newList) { ArrayList<Object> news = new ArrayList<>(newList); saveData("news_list_obj_", news); } public List<Object> getNewsListObj() { return getData("news_list_obj_"); } public void saveMe(UserDetail user) { saveData("Gcs_Me_", user); } public UserDetail getMe() { return getData("Gcs_Me_"); } public void removeMe() { removeDate("Gcs_Me_"); } public void saveSites(List<Sites> sitesList) { saveListData("sites_", sitesList); } public List<Sites> getSites() { return getData("sites_"); } public <T extends Serializable> void saveSitesItems(List<T> sitesList) { saveListData("sites_item_", sitesList); } public <T extends Serializable> ArrayList<T> getSitesItems() { return getData("sites_item_"); } }