DictionariesManager.java 4.55 KB
package com.studymachine.www.manager;

import com.google.gson.reflect.TypeToken;
import com.hjq.gson.factory.GsonFactory;
import com.hjq.http.EasyHttp;
import com.hjq.http.lifecycle.ApplicationLifecycle;
import com.hjq.http.listener.OnHttpListener;
import com.studymachine.www.enumtype.DictionariesEnum;
import com.studymachine.www.event.UserInfoEvent;
import com.studymachine.www.http.api.GetDictionariesApi;
import com.studymachine.www.http.model.HttpData;
import com.tencent.mmkv.MMKV;

import org.greenrobot.eventbus.EventBus;
import org.json.JSONObject;

import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

import timber.log.Timber;

/**
 * 字典管理
 */
public class DictionariesManager {
    private final static String DICTIONARIES_TAG = "studyDictionaries";

    private static volatile DictionariesManager dictionariesManager;

    private Map<String, List<Object>> dictionariesMap;

    private DictionariesManager() {
        initData();
        getHttpData();
    }

    public static DictionariesManager getInstance() {
        if (dictionariesManager == null) {
            synchronized (UserManager.class) {
                if (dictionariesManager == null) {
                    dictionariesManager = new DictionariesManager();
                }
            }
        }
        return dictionariesManager;
    }

    public Map<String, List<Object>> getDictionariesMap() {
        return dictionariesMap;
    }

    public void setDictionariesMap(Map<String, List<Object>> dictionariesMap) {
        this.dictionariesMap = dictionariesMap;
        String json=null;
        if(dictionariesMap!=null){
            json= GsonFactory.getSingletonGson().toJson(dictionariesMap);
        }
        MMKV.defaultMMKV().encode(DICTIONARIES_TAG,json);
        EventBus.getDefault().post(new UserInfoEvent());
    }

    /**
     * 获取字典中的key
     * @param dictionariesEnum 字典key值
     * @return 字典列表
     */
    public List<GetDictionariesApi.Bean> getDictionItem(DictionariesEnum dictionariesEnum) {
        if (dictionariesMap == null) {
            return new ArrayList<>();
        }
        if (dictionariesMap.get(dictionariesEnum.getKey()) == null) {
            return new ArrayList<>();
        }
        String json = GsonFactory.getSingletonGson().toJson(dictionariesMap.get(dictionariesEnum.getKey()));
        Type type = new TypeToken<List<GetDictionariesApi.Bean>>() {}.getType();
        return GsonFactory.getSingletonGson().fromJson(json, type);
    }


    /**
     * 回显字典
     *
     * @param dictionariesEnum 字典key值
     * @return 回显值
     */
    public String parseDiction(String value, DictionariesEnum dictionariesEnum) {
        GetDictionariesApi.Bean bean = findDictionItem(value, dictionariesEnum);
        if (bean != null) {
            return bean.getLabel();
        }
        return value;
    }

    /**
     * 寻找字典的item
     * @param value value值
     * @param dictionariesEnum 字典key值
     * @return 字典item
     */
    public GetDictionariesApi.Bean findDictionItem(String value, DictionariesEnum dictionariesEnum) {
        List<GetDictionariesApi.Bean> beanList = getDictionItem(dictionariesEnum);
        List<GetDictionariesApi.Bean> list = null;
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
            list = beanList.stream().filter(d -> d.getValue().equals(value)).collect(Collectors.toList());
        }
        assert list != null;
        return list.size() > 0 ? list.get(0) : null;
    }


    public void initData() {
        String json = MMKV.defaultMMKV().decodeString(DICTIONARIES_TAG, null);
        setDictionariesMap(GsonFactory.getSingletonGson().fromJson(json, new TypeToken<Map<String, List<Object>>>() {
        }.getType()));
    }

    public void getHttpData() {
        EasyHttp.post(new ApplicationLifecycle())
                .api(new GetDictionariesApi())
                .request(new OnHttpListener<HttpData<Map<String, List<Object>>>>() {
                    @Override
                    public void onSucceed(HttpData<Map<String, List<Object>>> result) {
                        setDictionariesMap(result.getData());
                    }

                    @Override
                    public void onFail(Exception e) {

                    }
                });
    }

//    /**
//     * 字典异常
//     */
//   public class DictionariesException extends Exception{
//        public DictionariesException(String message) {
//            super(message);
//        }
//    }


}