解析res资源目录下的raw文件夹里的xml文件

前端之家收集整理的这篇文章主要介绍了解析res资源目录下的raw文件夹里的xml文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

写应用程序时,一般把一些配置写在xml文件里,方便配置!然后在应用启动的时(在继承的application里)初始化配置

  1. //在application里做的初始化工作
  2. // 初始化设置
  3. SettingUtility.setSettingUtility();


使用xml里的配置

  1. <span style="white-space:pre"> </span>Logger.DEBUG = SettingUtility.getBooleanSetting("debug");
  2.  
  3. /**
  4. * 程序的文件目录,如果setting配置的是android,标志目录位于/sdcard/Application/PackageName/...下<br/>
  5. * 否则,就是/sdcard/setting[root_path]/...目录
  6. *
  7. * @return
  8. */
  9. public String getAppPath() {
  10. if ("android".equals(SettingUtility.getStringSetting("root_path")))
  11. return getExternalCacheDir().getAbsolutePath() + File.separator;
  12. return SdcardUtils.getSdcardPath() + File.separator + SettingUtility.getStringSetting("root_path") + File.separator;
  13. }




初始化工具类
  1. public class SettingUtility {
  2.  
  3. private static Map<String,Setting> settingMap;
  4.  
  5. static {
  6. settingMap = new HashMap<String,Setting>();
  7. }
  8.  
  9. private SettingUtility() {
  10.  
  11. }
  12.  
  13. public static void setSettingUtility() {
  14. addSettings("settings");
  15. <span style="white-space:pre"> </span>/**
  16. <span style="white-space:pre"> </span>*主要是一些初始化代码
  17. if (SdcardUtils.hasSdcardAndCanWrite()) {
  18. File rootFile = new File(GlobalContext.getInstance().getAppPath());
  19. if (!rootFile.exists())
  20. rootFile.mkdirs();
  21.  
  22. // 数据缓存目录设置
  23. File jsonFile = new File(rootFile.getAbsolutePath() + File.separator + getPermanentSettingAsStr("com_m_common_json","files"));
  24. if (!jsonFile.exists())
  25. jsonFile.mkdirs();
  26.  
  27. // 缓存目录设置
  28. File imageFile = new File(rootFile.getAbsolutePath() + File.separator + getPermanentSettingAsStr("com_m_common_image","images"));
  29. if (!imageFile.exists())
  30. imageFile.mkdirs();
  31. }*/
  32.  
  33. }
  34.  
  35. /**
  36. * 添加设置配置数据
  37. *
  38. * @param settingsXmlName
  39. */
  40. public static void addSettings(String settingsXmlName) {
  41. Map<String,Setting> newSettingMap = SettingsXmlParser.parseSettings(GlobalContext.getInstance(),settingsXmlName);
  42.  
  43. Set<String> keySet = newSettingMap.keySet();
  44. for (String key : keySet)
  45. settingMap.put(key,newSettingMap.get(key));
  46. }
  47.  
  48. public static boolean getBooleanSetting(String type) {
  49. if (settingMap.containsKey(type))
  50. return Boolean.parseBoolean(settingMap.get(type).getValue());
  51.  
  52. return false;
  53. }
  54.  
  55. public static int getIntSetting(String type) {
  56. if (settingMap.containsKey(type))
  57. return Integer.parseInt(settingMap.get(type).getValue());
  58.  
  59. return -1;
  60. }
  61.  
  62. public static String getStringSetting(String type) {
  63. if (settingMap.containsKey(type))
  64. return settingMap.get(type).getValue();
  65.  
  66. return null;
  67. }
  68.  
  69. public static Setting getSetting(String type) {
  70. if (settingMap.containsKey(type))
  71. return settingMap.get(type);
  72.  
  73. return null;
  74. }





1、放在res下的raw的xml资源文件 setting.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <app-settings>
  3.  
  4. <setting-array type="root_path" index="0">
  5. <des>应用程序相对sdcard的相对路径目录,所有的文件都存储在这个文件夹中</des>
  6. <setting>
  7. <value>android</value>
  8. </setting>
  9. </setting-array>
  10.  
  11. <setting-array type="com_m_common_json" index="0">
  12. <des>业务数据sdcard缓存路径,相对root_path路径</des>
  13. <setting>
  14. <value>app_data</value>
  15. </setting>
  16. </setting-array>
  17.  
  18. <setting-array type="com_m_common_image" index="0">
  19. <des>图片数据sdcard缓存路径,相对root_path路径</des>
  20. <setting>
  21. <value>app_image</value>
  22. </setting>
  23. </setting-array>
  24. <setting-array type="draft" index="0">
  25. <des>草稿图片,相对root_path路径</des>
  26. <setting>
  27. <value>draft</value>
  28. </setting>
  29. </setting-array>
  30.  
  31. <setting type="saveImage">
  32. <des>我收藏的图片</des>
  33. <value>myPics</value>
  34. </setting>
  35. <setting type="crashlogenable">
  36. <des>错误日志记录</des>
  37. <value>true</value>
  38. </setting>
  39. <setting type="crashlog">
  40. <des>错误日志目录</des>
  41. <value>crashlog</value>
  42. </setting>
  43.  
  44. <setting-array type="cache_utility" index="2">
  45. <des>缓存模式设置</des>
  46. <setting>
  47. <des>DB数据缓存</des>
  48. <value>org.aisen.android.support.cache.DBCacheUtility</value>
  49. </setting>
  50. <setting>
  51. <des>文件数据缓存</des>
  52. <value>com.sysweal.marketing.support.cache.FileCacheUtility_2</value>
  53. </setting>
  54. </setting-array>
  55.  
  56. <setting type="memory_cache_validity">
  57. <des>内存缓存数据有效期,等于0为不保持内存数据,单位(s)</des>
  58. <value>0</value>
  59. </setting>
  60. <setting type="http">
  61. <value>org.aisen.android.network.http.DefHttpUtility</value>
  62. </setting>
  63.  
  64. <setting type="cache_validtime">
  65. <des>缓存数据的有效期,max_date为永久有效,单位(s)</des>
  66. <value>max_date</value>
  67. </setting>
  68.  
  69. <setting type="debug">
  70. <des>APP是否是DEBUG模式</des>
  71. <value>false</value>
  72. </setting>
  73.  
  74. <setting type="cache_enable">
  75. <des>缓存开关,在这里设置无效,需要在action.xml中覆盖这个设置</des>
  76. <value>true</value>
  77. </setting>
  78.  
  79. <setting type="page_count">
  80. <des>分页大小</des>
  81. <value>50</value>
  82. </setting>
  83.  
  84. <setting-array type="app_channel" index="0">
  85. <des>应用渠道</des>
  86. <setting>
  87. <value>test</value>
  88. </setting>
  89. <setting>
  90. <value>wandoujia</value>
  91. </setting>
  92. <setting>
  93. <value>googleplay</value>
  94. </setting>
  95. </setting-array>
  96. <setting type="bd_debug">
  97. <des>百度移动统计debug</des>
  98. <value>false</value>
  99. </setting>
  100. <setting type="image_suffix">
  101. <des>图片缓存的后缀</des>
  102. <value>auto</value>
  103. </setting>
  104. <setting type="about_url">
  105. <des>关于</des>
  106. <value>https://github.com/wangdan/AisenWeiBo/blob/master/README.md</value>
  107. </setting>
  108. <setting type="help_url">
  109. <des>帮助</des>
  110. <value>https://github.com/wangdan/AisenWeiBo/blob/master/HELP.md</value>
  111. </setting>
  112. <!-- <setting type="fragment_lifecycle">
  113. <des>Fragment帮助类</des>
  114. <value>org.aisen.weibo.sina.ui.fragment.base.FragmentHelper</value>
  115. </setting> -->
  116.  
  117. <setting type="activity_helper">
  118. <des>Activity帮助类</des>
  119. <value>org.aisen.weibo.sina.ui.activity.basic.AisenActivityHelper</value>
  120. </setting>
  121.  
  122. <setting type="weico_key">
  123. <value>211160679</value>
  124. </setting>
  125.  
  126. <setting type="weico_screet">
  127. <value>63b64d531b98c2dbff2443816f274dd3</value>
  128. </setting>
  129.  
  130. <setting type="weico_callback">
  131. <value>http://oauth.weico.cc</value>
  132. </setting>
  133.  
  134. </app-settings>

2、解析成的实体bean,SettingBean,Setting,SettingArray,SettingExtras
  1. class SettingBean implements Serializable {
  2.  
  3. private static final long serialVersionUID = -3694407301270573142L;
  4.  
  5. private String description;
  6.  
  7. private String type;
  8.  
  9. private String value;
  10.  
  11. public String getDescription() {
  12. return description;
  13. }
  14.  
  15. public void setDescription(String description) {
  16. this.description = description;
  17. }
  18.  
  19. public String getType() {
  20. return type;
  21. }
  22.  
  23. public void setType(String type) {
  24. this.type = type;
  25. }
  26.  
  27. public String getValue() {
  28. return value;
  29. }
  30.  
  31. public void setValue(String value) {
  32. this.value = value;
  33. }
  34. }



  1. public class Setting extends SettingBean implements Serializable {
  2.  
  3. private static final long serialVersionUID = 4801654811733634325L;
  4. private Map<String,SettingExtra> extras;
  5.  
  6. public Setting() {
  7. extras = new HashMap<String,SettingExtra>();
  8. }
  9.  
  10. public Map<String,SettingExtra> getExtras() {
  11. return extras;
  12. }
  13.  
  14. public void setExtras(Map<String,SettingExtra> extras) {
  15. this.extras = extras;
  16. }
  17. }



  1. public class SettingArray extends SettingBean implements Serializable {
  2.  
  3. private static final long serialVersionUID = 6482515166206579219L;
  4.  
  5. private List<Setting> settingArray;
  6.  
  7. private int index;
  8. public SettingArray() {
  9. settingArray = new ArrayList<Setting>();
  10. }
  11.  
  12. public List<Setting> getSettingArray() {
  13. return settingArray;
  14. }
  15.  
  16. public void setSettingArray(List<Setting> settingArray) {
  17. this.settingArray = settingArray;
  18. }
  19.  
  20. public int getIndex() {
  21. return index;
  22. }
  23.  
  24. public void setIndex(int index) {
  25. this.index = index;
  26. }
  27. }

  1. public class SettingExtra extends SettingBean implements Serializable {
  2.  
  3. private static final long serialVersionUID = 4608815242740722900L;
  4.  
  5. }

3、解析的方法,返回的是一个map集合
  1. static Map<String,Setting> parseSettings(Context context,String fileName) {
  2. Map<String,Setting> settingMap = new HashMap<String,Setting>();
  3. List<SettingArray> settingArray = new ArrayList<SettingArray>();
  4. List<SettingExtra> settingExtras = null;
  5.  
  6. Setting readSetting = null;
  7. SettingArray readSettingArray = null;
  8. SettingExtra readSettingExtra = null;
  9.  
  10. XmlPullParser xmlResParser = null;
  11. try {
  12. String packageName = context.getPackageName();
  13. Resources resources = context.getPackageManager().getResourcesForApplication(packageName);
  14.  
  15. Logger.d("read xml resource,filename = " + fileName);
  16.  
  17. int resId = resources.getIdentifier(fileName,"raw",packageName);
  18.  
  19. // 解析URL配置
  20. xmlResParser = Xml.newPullParser();
  21. xmlResParser.setInput(resources.openRawResource(resId),"utf-8");
  22. int eventType = xmlResParser.getEventType();
  23. while (eventType != XmlPullParser.END_DOCUMENT) {
  24.  
  25. switch (eventType) {
  26. case XmlPullParser.START_TAG:
  27. if ("setting-array".equals(xmlResParser.getName())) {
  28. readSettingArray = new SettingArray();
  29. readSettingArray.setType(xmlResParser.getAttributeValue(null,"type"));
  30. readSettingArray.setIndex(Integer.parseInt(xmlResParser.getAttributeValue(null,"index")));
  31. }
  32.  
  33. if ("setting".equals(xmlResParser.getName())) {
  34. readSetting = new Setting();
  35. readSetting.setType(xmlResParser.getAttributeValue(null,"type"));
  36. }
  37.  
  38. if ("extras".equals(xmlResParser.getName())) {
  39. settingExtras = new ArrayList<SettingExtra>();
  40. }
  41.  
  42. if ("extra".equals(xmlResParser.getName())) {
  43. readSettingExtra = new SettingExtra();
  44. readSettingExtra.setType(xmlResParser.getAttributeValue(null,"type"));
  45. }
  46.  
  47. if ("des".equals(xmlResParser.getName())) {
  48. if (readSettingExtra != null) {
  49. readSettingExtra.setDescription(xmlResParser.nextText());
  50. } else if (readSetting != null) {
  51. readSetting.setDescription(xmlResParser.nextText());
  52. } else if (readSettingArray != null) {
  53. readSettingArray.setDescription(xmlResParser.nextText());
  54. }
  55. }
  56.  
  57. if ("value".equals(xmlResParser.getName())) {
  58. if (readSettingExtra != null) {
  59. readSettingExtra.setValue(xmlResParser.nextText());
  60. } else if (readSetting != null) {
  61. readSetting.setValue(xmlResParser.nextText());
  62. }
  63. }
  64.  
  65. break;
  66. case XmlPullParser.END_TAG:
  67. if ("setting".equals(xmlResParser.getName())) {
  68. if (readSetting != null) {
  69. if (readSettingArray != null) {
  70. readSettingArray.getSettingArray().add(readSetting);
  71. } else {
  72. settingMap.put(readSetting.getType(),readSetting);
  73. }
  74. }
  75. Logger.d(TAG,String.format("parse new setting --->%s",JSON.toJSONString(readSetting)));
  76. readSetting = null;
  77. }
  78.  
  79. if ("setting-array".equals(xmlResParser.getName())) {
  80. settingArray.add(readSettingArray);
  81. Logger.d(TAG,String.format("parse new settingArray --->%s",JSON.toJSONString(readSettingArray)));
  82. readSettingArray = null;
  83. }
  84.  
  85. if ("extras".equals(xmlResParser.getName())) {
  86. if (readSetting != null)
  87. for (SettingExtra extra : settingExtras)
  88. readSetting.getExtras().put(extra.getType(),extra);
  89.  
  90. settingExtras = null;
  91. }
  92.  
  93. if ("extra".equals(xmlResParser.getName())) {
  94. settingExtras.add(readSettingExtra);
  95. Logger.d(TAG,String.format("parse new settingExtra --->%s",JSON.toJSONString(settingExtras)));
  96. readSettingExtra = null;
  97. }
  98. }
  99.  
  100. eventType = xmlResParser.next();
  101. }
  102. } catch (Exception e) {
  103. e.printStackTrace();
  104. } finally {
  105. // if (xmlResParser != null)
  106. // xmlResParser.close();
  107. }
  108.  
  109. for (SettingArray array : settingArray) {
  110. if (array.getSettingArray().size() > array.getIndex()) {
  111. Setting setting = array.getSettingArray().get(array.getIndex());
  112. setting.setType(array.getType());
  113. settingMap.put(setting.getType(),setting);
  114. }
  115. }
  116.  
  117. return settingMap;
  118. }

猜你在找的XML相关文章