package com.example.administrator.cookman.model.manager; import android.content.SharedPreferences; import android.util.Log; import com.example.administrator.cookman.CookManApplication; import com.example.administrator.cookman.model.entity.CookEntity.CookSearchHistory; import org.litepal.crud.DataSupport; import java.util.ArrayList; import java.util.List; import static android.content.Context.MODE_PRIVATE; /** * Created by Administrator on 2017/2/22. */ public class CookSearchHistoryManager { private static CookSearchHistoryManager Instance = null; public static CookSearchHistoryManager getInstance(){ if(Instance == null) Instance = new CookSearchHistoryManager(); return Instance; } private final static int History_Queue_Max_Size = 10; private List<CookSearchHistory> datas; private List<CookSearchHistory> buffer; private final static String SharedPreference_Key_Num = "num"; private final static String SharedPreference_Key_Search_Pre = "search"; private static String userFilePath = "shareprefer_file_cook_search"; private SharedPreferences shareUserFile; private SharedPreferences.Editor editorUserFile; private CookSearchHistoryManager(){ datas = new ArrayList<>(); buffer = new ArrayList<>(); shareUserFile = CookManApplication.getContext().getSharedPreferences(userFilePath, MODE_PRIVATE); editorUserFile = shareUserFile.edit(); } private List<CookSearchHistory> getDatasFrmFile(){ List<CookSearchHistory> datas = new ArrayList<>(); int num = shareUserFile.getInt(SharedPreference_Key_Num, 0); if(0 == num) return datas; for(int i = 0; i < num; i++){ datas.add(new CookSearchHistory(shareUserFile.getString(SharedPreference_Key_Search_Pre + i, ""))); } return datas; } private void saveDatas2File(List<CookSearchHistory> datas){ int num = datas.size(); editorUserFile.putInt(SharedPreference_Key_Num, num); if(0 == num){ editorUserFile.commit(); return ; } for(int i = 0; i < num; i++){ editorUserFile.putString(SharedPreference_Key_Search_Pre + i, datas.get(i).getName()); } editorUserFile.commit(); } public List<CookSearchHistory> getDatas(){ datas.clear(); buffer.clear(); datas = getDatasFrmFile(); return datas; } public void add2Buffer(CookSearchHistory data){ for(CookSearchHistory item : datas){ if(data.getName().equals(item.getName())) return ; } for(CookSearchHistory item : buffer){ if(data.getName().equals(item.getName())) return ; } buffer.add(data); } public void clean(){ this.datas.clear(); this.buffer.clear(); editorUserFile.putInt(SharedPreference_Key_Num, 0); editorUserFile.commit(); } //耗时操作 public void save(){ if(buffer.size() < 1) return ; if(buffer.size() >= History_Queue_Max_Size){ int end = buffer.size() - History_Queue_Max_Size; datas.clear(); for(int i = buffer.size() - 1; i >= end; i--){ datas.add(buffer.get(i)); } save2TB(); return ; } //队列满 if(datas.size() == History_Queue_Max_Size){ int end = datas.size() - buffer.size(); List<CookSearchHistory> headDatas = new ArrayList<>(); for(int i = 0; i < end; i++){ headDatas.add(datas.get(i)); } datas.clear(); for(int i = buffer.size() - 1; i >= 0; i--){ datas.add(buffer.get(i)); } for(CookSearchHistory item : headDatas){ datas.add(item); } save2TB(); return ; } //队列不满 if(datas.size() + buffer.size() > History_Queue_Max_Size){ int end = History_Queue_Max_Size - buffer.size(); List<CookSearchHistory> headDatas = new ArrayList<>(); for(int i = 0; i < end; i++){ headDatas.add(datas.get(i)); } datas.clear(); for(int i = buffer.size() - 1; i >= 0; i--){ datas.add(buffer.get(i)); } for(CookSearchHistory item : headDatas){ datas.add(item); } save2TB(); return ; } List<CookSearchHistory> headDatas = new ArrayList<>(); for(int i = 0; i < datas.size(); i++){ headDatas.add(datas.get(i)); } datas.clear(); for(int i = buffer.size() - 1; i >= 0; i--){ datas.add(buffer.get(i)); } for(CookSearchHistory item : headDatas){ datas.add(item); } save2TB(); } private void save2TB(){ saveDatas2File(datas); } }