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】其实是类似的,那么理解起来应该就非常容易了,我也不多讲了。
好了,今天就到这里了,今天的内容比较简单,为什么要开一篇出来写?因为我喜欢按细分的讲,每篇都讲一个核心的功能,方便以后自己能更快的查看。
下一篇讲怎么发布插件了。
谢谢支持~~~