Plugins开发Android areaAndroid知识

Android Studio插件开发8--数据读写

2017-04-04  本文已影响153人  街头客

上一篇:ProjectViewPopupMenu的创建
下一篇:插件的打包、发布

插件已发布

1,在Plugins中搜索CCLines,进行下载安装;
2,源码在Github中开源下载
3,搜索不到的朋友,可以升级一下idea后再尝试,因为插件有跟idea的版本关联;

上一篇其实我们就已经把整个插件开发基本讲解完了,今天我要讲的内容也比较简单,就是数据的读写。

如果喜欢的话,记得支持一下~~~

PropertiesComponent读写类

首先我们先来直接看下我其中一个数据存储类(SuffixMapping)的代码,该类的作用就是根据统计文件类型的后缀名来读写统计规范,代码如下:

PS

发布出去后,在Android Studio中使用【org.codehaus.jettison.json】解析库出错,所以我后面使用了【net.sf.json】解析库。

package compute;

import com.intellij.ide.util.PropertiesComponent;
import org.codehaus.jettison.json.JSONArray;
import org.codehaus.jettison.json.JSONObject;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 后缀名映射 2017/3/20 10:31
 */
public class SuffixMapping {

    private static final String SUFFIX_DATA_KEY = "suffix_data_key";

    public static final String SUFFIX = "suffix"; // 后缀名
    public static final String START_MORE_COMMENT = "start_more_comment"; // 多行注释开头
    public static final String END_MORE_COMMENT = "end_more_comment"; // 多行注释结尾
    public static final String SINGLE_COMMENT = "single_comment"; // 单行注释

    public static Map<String, Map<String, String>> mapData = new HashMap<>(); // 存放数据 2017/3/20 10:56

    /**
     * 初始化后缀名映射 2017/3/20 10:39
     */
    public static void initMapping() {
        try {
            mapData.clear(); // 清空数据 2017/3/20 10:56

            // 获取数据 2017/4/1 19:56
            String[] data = _getData();
            String json = "[";
            for (int i = 0; i < data.length; i++) {
                json += data[i] + ",";
            }

            json += "]";

            // 解析json数据 2017/3/20 10:57
            JSONArray jsonArray = new JSONArray(json);
            JSONObject jsonObject;
            Map<String, String> mapData;
            for (int i = 0; i < jsonArray.length(); i++) {
                jsonObject = jsonArray.optJSONObject(i);
                if (jsonObject != null) {
                    mapData = new HashMap<>();
                    mapData.put(START_MORE_COMMENT, jsonObject.optString(START_MORE_COMMENT).toUpperCase().trim());
                    mapData.put(END_MORE_COMMENT, jsonObject.optString(END_MORE_COMMENT).toUpperCase().trim());
                    mapData.put(SINGLE_COMMENT, jsonObject.optString(SINGLE_COMMENT).toUpperCase().trim());

                    SuffixMapping.mapData.put(jsonObject.optString(SUFFIX).toUpperCase().trim(), mapData);
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("Suffix mapping Exception is " + e.getMessage());
        }
    }

    /**
     * 获取数据列表 2017/4/1 20:09
     * @return
     */
    private static String[] _getData() {
        if (PropertiesComponent.getInstance().isValueSet(SUFFIX_DATA_KEY)) {
            return PropertiesComponent.getInstance().getValues(SUFFIX_DATA_KEY);
        } else {
            return new String[] {"{\"suffix\": \"JAVA\", \"start_more_comment\": \"/*\", \"end_more_comment\": \"*/\", \"single_comment\": \"//\"}",
            "{\"suffix\": \"XML\", \"start_more_comment\": \"<!--\", \"end_more_comment\": \"-->\", \"single_comment\": \"\"}",
            "{\"suffix\": \"PY\", \"start_more_comment\": \"''',\\\"\\\"\\\"\", \"end_more_comment\": \"''',\\\"\\\"\\\"\", \"single_comment\": \"#\"}"};
        }
    }

    /**
     * 保存数据 2017/4/1 20:20
     * @param array
     */
    private static void _saveData(String[] array) {
        PropertiesComponent.getInstance().setValues(SUFFIX_DATA_KEY, array);
    }

    /**
     * 添加统计类型 2017/3/27 15:08
     * @param data 数据
     */
    public static void addMapping(Map<String, String> data) {
        try {
            // 初始化 2017/3/27 16:00
            if (mapData.size() == 0)
                initMapping();

            if (data != null)
                mapData.put(data.get(SUFFIX), data);

            JSONObject jsonObject;
            Map<String, String> mapTemp;
            String[] datas = new String[mapData.size()];
            int idx = 0;
            for (String suffix:mapData.keySet()) {
                mapTemp = mapData.get(suffix);
                jsonObject = new JSONObject();
                jsonObject.put(SUFFIX, suffix);
                jsonObject.put(START_MORE_COMMENT, mapTemp.get(START_MORE_COMMENT));
                jsonObject.put(END_MORE_COMMENT, mapTemp.get(END_MORE_COMMENT));
                jsonObject.put(SINGLE_COMMENT, mapTemp.get(SINGLE_COMMENT));

                datas[idx++] = jsonObject.toString();
            }

            _saveData(datas);
        } catch (Exception e) {
            System.out.println("Types Exception is " + e.getMessage());
        }
    }

    /**
     * 添加统计类型 2017/3/27 15:08
     * @param suffix key值
     */
    public static void removeMapping(String suffix) {
        // 初始化 2017/3/27 16:00
        if (mapData.size() == 0)
            initMapping();

        if (mapData.containsKey(suffix))
            mapData.remove(suffix);

        addMapping(null);
    }

    /**
     * 添加统计类型 2017/3/27 15:08
     * @param lstSuffix key值
     */
    public static void removeMappings(List<String> lstSuffix) {
        if (lstSuffix == null || lstSuffix.size() == 0)
            return;

        // 初始化 2017/3/27 16:00
        if (mapData.size() == 0)
            initMapping();

        for (String suffix:lstSuffix)
            if (mapData.containsKey(suffix))
                mapData.remove(suffix);

        addMapping(null);
    }

}

上面一堆逻辑,我们大都粗略看看方法的注释头就好了,其中我们只要着重关注两个方法:_getData()、_saveData()。

我们可以很直观的看到两个方法中是使用PropertiesComponent类进行数据的存储,其实写过Android的人应该有所联想的,该类跟我们经常使用的【SharedPreferences】其实是类似的,那么理解起来应该就非常容易了,我也不多讲了。

好了,今天就到这里了,今天的内容比较简单,为什么要开一篇出来写?因为我喜欢按细分的讲,每篇都讲一个核心的功能,方便以后自己能更快的查看。

下一篇讲怎么发布插件了。

谢谢支持~~~

上一篇下一篇

猜你喜欢

热点阅读