|
|
@@ -5,11 +5,11 @@ package kr.co.zumo.app.lifeplus.model.module;
|
|
|
|
|
|
import android.util.Log;
|
|
|
|
|
|
+import java.lang.ref.SoftReference;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
|
|
|
import io.reactivex.Single;
|
|
|
-import io.reactivex.functions.Consumer;
|
|
|
import kr.co.zumo.app.lifeplus.bean.api.CategoryBean;
|
|
|
import kr.co.zumo.app.lifeplus.bean.api.LifeplusAPIBean;
|
|
|
import kr.co.zumo.app.lifeplus.bean.api.SearchContentsBean;
|
|
|
@@ -31,9 +31,9 @@ import kr.co.zumo.app.lifeplus.util.StringUtil;
|
|
|
*/
|
|
|
public class APISearchModule extends LifeplusAPIModule<SearchRequestBean, SearchResultBean> {
|
|
|
|
|
|
- private static List<SearchContentsBean> searchContentsBeans;
|
|
|
- private static List<TagBean> tagBeans;
|
|
|
- private static List<CategoryBean> categoryBeans;
|
|
|
+ private static SoftReference<List<SearchContentsBean>> searchContentsReference;
|
|
|
+ private static SoftReference<List<TagBean>> tagReference;
|
|
|
+ private static SoftReference<List<CategoryBean>> categoryReference;
|
|
|
private static String keyword;
|
|
|
private static String order;
|
|
|
|
|
|
@@ -44,9 +44,15 @@ public class APISearchModule extends LifeplusAPIModule<SearchRequestBean, Search
|
|
|
|
|
|
// 기본 데이터(필터/정렬 없이 전체 데이터, 동일 키워드, 동일 정렬)라면 캐쉬에서 리턴
|
|
|
// 키워드 동일
|
|
|
- if (null != searchContentsBeans && StringUtil.isEmpty(filters) && null != keyword && keyword.equals(requestBean.getKeyword())
|
|
|
+ if (null != searchContentsReference && null != tagReference && null != categoryReference
|
|
|
+ && null != searchContentsReference.get() && null != tagReference.get() && null != categoryReference.get()
|
|
|
+ && StringUtil.isEmpty(filters) && null != keyword && keyword.equals(requestBean.getKeyword())
|
|
|
// 정렬이 없거나, 이전과 정렬이 같다면
|
|
|
&& ((null == order && null == requestBean.getOrder()) || (null != order && order.equals(requestBean.getOrder())))) {
|
|
|
+
|
|
|
+ List<TagBean> tags = new ArrayList<>(tagReference.get());
|
|
|
+ List<CategoryBean> categories = new ArrayList<>(categoryReference.get());
|
|
|
+ List<SearchContentsBean> searchContentsBeans = searchContentsReference.get();
|
|
|
// 필터가 없을 때만 적용
|
|
|
List<SearchContentsBean> list = new ArrayList<>();
|
|
|
if (StringUtil.isEmpty(categoryNo)) {
|
|
|
@@ -66,14 +72,12 @@ public class APISearchModule extends LifeplusAPIModule<SearchRequestBean, Search
|
|
|
}
|
|
|
|
|
|
if (list.size() > 0) {
|
|
|
- Log.e("APP# APISearchModule | getAPI", "|" + " ************** cache return ***************");
|
|
|
+ Log.w("APP# APISearchModule | getAPI", "|" + " -------------------- cache return --------------------");
|
|
|
return Single.fromCallable(() -> {
|
|
|
- List<TagBean> tags = new ArrayList<>(tagBeans);
|
|
|
- List<CategoryBean> categoryBeans = new ArrayList<>(APISearchModule.categoryBeans);
|
|
|
SearchResultBean searchResultBean = new SearchResultBean();
|
|
|
searchResultBean.setCode(LifeplusAPIBean.RETURN_SUCCESS);
|
|
|
searchResultBean.setTagBeans(tags);
|
|
|
- searchResultBean.setCategoryBeans(categoryBeans);
|
|
|
+ searchResultBean.setCategoryBeans(categories);
|
|
|
searchResultBean.setData(list);
|
|
|
searchResultBean.setListCount(list.size());
|
|
|
return searchResultBean;
|
|
|
@@ -81,41 +85,40 @@ public class APISearchModule extends LifeplusAPIModule<SearchRequestBean, Search
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- return new LifeplusAPIRepository().search(requestBean).doOnSuccess(new Consumer<SearchResultBean>() {
|
|
|
- @Override
|
|
|
- public void accept(SearchResultBean searchResultBean) throws Exception {
|
|
|
+ return new LifeplusAPIRepository().search(requestBean)
|
|
|
+ .doOnSuccess(searchResultBean -> {
|
|
|
// 기본 데이터(필터/정렬 없이 전체 데이터)라면 캐쉬에 저장
|
|
|
// 필터/정렬이 없을 때만 적용
|
|
|
if (StringUtil.isEmpty(filters) && StringUtil.isEmpty(categoryNo)) {
|
|
|
- Log.e("APP# APISearchModule | getAPI", "|" + " ************** cache saving ***************");
|
|
|
+ Log.w("APP# APISearchModule | getAPI", "|" + " ************** cache saving ***************");
|
|
|
// 필터 없는 데이터
|
|
|
// 로드한 전체 데이터 저장
|
|
|
keyword = requestBean.getKeyword();
|
|
|
order = requestBean.getOrder();
|
|
|
- searchContentsBeans = new ArrayList<>();
|
|
|
+
|
|
|
if (null != searchResultBean.getData()) {
|
|
|
- searchContentsBeans.addAll(searchResultBean.getData());
|
|
|
+ searchContentsReference = new SoftReference<>(new ArrayList<>(searchResultBean.getData()));
|
|
|
}
|
|
|
- tagBeans = new ArrayList<>();
|
|
|
+
|
|
|
if (null != searchResultBean.getTagBeans()) {
|
|
|
- tagBeans.addAll(searchResultBean.getTagBeans());
|
|
|
+ tagReference = new SoftReference<>(new ArrayList<>(searchResultBean.getTagBeans()));
|
|
|
}
|
|
|
- categoryBeans = new ArrayList<>();
|
|
|
+
|
|
|
if (null != searchResultBean.getCategoryBeans()) {
|
|
|
- categoryBeans.addAll(searchResultBean.getCategoryBeans());
|
|
|
+ categoryReference = new SoftReference<>(new ArrayList<>(searchResultBean.getCategoryBeans()));
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
- });
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* clear cache
|
|
|
*/
|
|
|
public static void clearCache() {
|
|
|
- searchContentsBeans = null;
|
|
|
- tagBeans = null;
|
|
|
- categoryBeans = null;
|
|
|
+ Log.w("APP# APISearchModule | getAPI", "|" + " ================ cache clear ================");
|
|
|
+ searchContentsReference = null;
|
|
|
+ tagReference = null;
|
|
|
+ categoryReference = null;
|
|
|
keyword = null;
|
|
|
order = null;
|
|
|
}
|