Android Studioプラグイン開発8-データ読み書き

6380 ワード

下一篇: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> 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 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\": \"\", \"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 data) {
        try {
            //     2017/3/27 16:00
            if (mapData.size() == 0)
                initMapping();

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

            JSONObject jsonObject;
            Map 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 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);
    }

}


上の論理の山では、方法の注釈ヘッダをざっと見ればいいのですが、その中で2つの方法に注目すればいいのです.getData()、_saveData().
PropertiesComponentクラスを使用してデータを格納する2つの方法が直感的に見られますが、Androidを書いたことがある人は連想するはずです.このクラスは私たちがよく使う「SharedPreferences」と似ています.理解するのは容易ではないはずです.私もあまり話しません.
はい、今日はここまでです.今日の内容は簡単ですが、どうして1編書いて書きますか.私は細分化して話すのが好きなので、どの編も核心的な機能を話して、後で自分でもっと速く見ることができます.
次はプラグインの公開方法について説明します.
応援ありがとう~~~