加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 05:56:14 所属栏目:百科 来源:网络整理
导读:写应用程序时,一般把一些配置写在xml文件里,方便配置!然后在应用启动的时(在继承的application里)初始化配置 //在application里做的初始化工作// 初始化设置SettingUtility.setSettingUtility(); 使用xml里的配置 span style="white-space:pre"/spanLog

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

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


使用xml里的配置

<span style="white-space:pre">	</span>Logger.DEBUG = SettingUtility.getBooleanSetting("debug");

	/**
	 * 程序的文件目录,如果setting配置的是android,标志目录位于/sdcard/Application/PackageName/...下<br/>
	 * 否则,就是/sdcard/setting[root_path]/...目录
	 * 
	 * @return
	 */
	public String getAppPath() {
		if ("android".equals(SettingUtility.getStringSetting("root_path")))
			return getExternalCacheDir().getAbsolutePath() + File.separator;
		
		return SdcardUtils.getSdcardPath() + File.separator + SettingUtility.getStringSetting("root_path") + File.separator;
	}




初始化工具类
public class SettingUtility {

	private static Map<String,Setting> settingMap;

	static {
		settingMap = new HashMap<String,Setting>();
	}

	private SettingUtility() {

	}

	public static void setSettingUtility() {
		
		addSettings("settings");
<span style="white-space:pre">	</span>/**
<span style="white-space:pre">	</span>*主要是一些初始化代码
        if (SdcardUtils.hasSdcardAndCanWrite()) {
            File rootFile = new File(GlobalContext.getInstance().getAppPath());
            if (!rootFile.exists())
                rootFile.mkdirs();

            // 数据缓存目录设置
            File jsonFile = new File(rootFile.getAbsolutePath() + File.separator + getPermanentSettingAsStr("com_m_common_json","files"));
            if (!jsonFile.exists())
                jsonFile.mkdirs();

            // 缓存目录设置
            File imageFile = new File(rootFile.getAbsolutePath() + File.separator + getPermanentSettingAsStr("com_m_common_image","images"));
            if (!imageFile.exists())
                imageFile.mkdirs();
        }*/

	}

	/**
	 * 添加设置配置数据
	 * 
	 * @param settingsXmlName
	 */
	public static void addSettings(String settingsXmlName) {
		Map<String,Setting> newSettingMap = SettingsXmlParser.parseSettings(GlobalContext.getInstance(),settingsXmlName);

		Set<String> keySet = newSettingMap.keySet();
		for (String key : keySet)
			settingMap.put(key,newSettingMap.get(key));
	}

	public static boolean getBooleanSetting(String type) {
		if (settingMap.containsKey(type))
			return Boolean.parseBoolean(settingMap.get(type).getValue());

		return false;
	}

	public static int getIntSetting(String type) {
		if (settingMap.containsKey(type))
			return Integer.parseInt(settingMap.get(type).getValue());

		return -1;
	}

	public static String getStringSetting(String type) {
		if (settingMap.containsKey(type))
			return settingMap.get(type).getValue();

		return null;
	}

	public static Setting getSetting(String type) {
		if (settingMap.containsKey(type))
			return settingMap.get(type);

		return null;
	}





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

<?xml version="1.0" encoding="UTF-8"?>
<app-settings>

	<setting-array type="root_path" index="0">
		<des>应用程序相对sdcard的相对路径目录,所有的文件都存储在这个文件夹中</des>
		<setting>
			<value>android</value>
		</setting>
	</setting-array>

	<setting-array type="com_m_common_json" index="0">
		<des>业务数据sdcard缓存路径,相对root_path路径</des>
		<setting>
			<value>app_data</value>
		</setting>
	</setting-array>

	<setting-array type="com_m_common_image" index="0">
		<des>图片数据sdcard缓存路径,相对root_path路径</des>
		<setting>
			<value>app_image</value>
		</setting>
	</setting-array>
	
	<setting-array type="draft" index="0">
		<des>草稿图片,相对root_path路径</des>
		<setting>
			<value>draft</value>
		</setting>
	</setting-array>

	<setting type="saveImage">
		<des>我收藏的图片</des>
		<value>myPics</value>
	</setting>
	
	<setting type="crashlogenable">
		<des>错误日志记录</des>
		<value>true</value>
	</setting>
	
	<setting type="crashlog">
		<des>错误日志目录</des>
		<value>crashlog</value>
	</setting>

	<setting-array type="cache_utility" index="2">
		<des>缓存模式设置</des>
		<setting>
			<des>DB数据缓存</des>
			<value>org.aisen.android.support.cache.DBCacheUtility</value>
		</setting>
		<setting>
			<des>文件数据缓存</des>
			<value>com.sysweal.marketing.support.cache.FileCacheUtility_2</value>
		</setting>
	</setting-array>

	<setting type="memory_cache_validity">
		<des>内存缓存数据有效期,等于0为不保持内存数据,单位(s)</des>
		<value>0</value>
	</setting>
	
	<setting type="http">
	    <value>org.aisen.android.network.http.DefHttpUtility</value>
	</setting>

	<setting type="cache_validtime">
		<des>缓存数据的有效期,max_date为永久有效,单位(s)</des>
		<value>max_date</value>
	</setting>

	<setting type="debug">
		<des>APP是否是DEBUG模式</des>
		<value>false</value>
	</setting>

	<setting type="cache_enable">
		<des>缓存开关,在这里设置无效,需要在action.xml中覆盖这个设置</des>
		<value>true</value>
	</setting>

	<setting type="page_count">
		<des>分页大小</des>
		<value>50</value>
	</setting>

	<setting-array type="app_channel" index="0">
		<des>应用渠道</des>
		<setting>
			<value>test</value>
		</setting>
		<setting>
			<value>wandoujia</value>
		</setting>
        <setting>
            <value>googleplay</value>
        </setting>
	</setting-array>
	
	<setting type="bd_debug">
		<des>百度移动统计debug</des>
		<value>false</value>
	</setting>
	
	<setting type="image_suffix">
		<des>图片缓存的后缀</des>
		<value>auto</value>
	</setting>
	
	<setting type="about_url">
		<des>关于</des>
		<value>https://github.com/wangdan/AisenWeiBo/blob/master/README.md</value>
	</setting>
	
	<setting type="help_url">
		<des>帮助</des>
		<value>https://github.com/wangdan/AisenWeiBo/blob/master/HELP.md</value>
	</setting>
	
	<!-- <setting type="fragment_lifecycle">
		<des>Fragment帮助类</des>
		<value>org.aisen.weibo.sina.ui.fragment.base.FragmentHelper</value>
	</setting> -->

	<setting type="activity_helper">
		<des>Activity帮助类</des>
		<value>org.aisen.weibo.sina.ui.activity.basic.AisenActivityHelper</value>
	</setting>

    <setting type="weico_key">
        <value>211160679</value>
    </setting>

    <setting type="weico_screet">
        <value>63b64d531b98c2dbff2443816f274dd3</value>
    </setting>

    <setting type="weico_callback">
        <value>http://oauth.weico.cc</value>
    </setting>

</app-settings>

2、解析成的实体bean,SettingBean,Setting,SettingArray,SettingExtras
class SettingBean implements Serializable {

	private static final long serialVersionUID = -3694407301270573142L;

	private String description;

	private String type;

	private String value;

	public String getDescription() {
		return description;
	}

	public void setDescription(String description) {
		this.description = description;
	}

	public String getType() {
		return type;
	}

	public void setType(String type) {
		this.type = type;
	}

	public String getValue() {
		return value;
	}

	public void setValue(String value) {
		this.value = value;
	}
}



public class Setting extends SettingBean implements Serializable {

	private static final long serialVersionUID = 4801654811733634325L;
	
	private Map<String,SettingExtra> extras;

	public Setting() {
		extras = new HashMap<String,SettingExtra>();
	}

	public Map<String,SettingExtra> getExtras() {
		return extras;
	}

	public void setExtras(Map<String,SettingExtra> extras) {
		this.extras = extras;
	}
	
}



public class SettingArray extends SettingBean implements Serializable {

	private static final long serialVersionUID = 6482515166206579219L;

	private List<Setting> settingArray;

	private int index;
	
	public SettingArray() {
		settingArray = new ArrayList<Setting>();
	}

	public List<Setting> getSettingArray() {
		return settingArray;
	}

	public void setSettingArray(List<Setting> settingArray) {
		this.settingArray = settingArray;
	}

	public int getIndex() {
		return index;
	}

	public void setIndex(int index) {
		this.index = index;
	}
}

public class SettingExtra extends SettingBean implements Serializable {

	private static final long serialVersionUID = 4608815242740722900L;

}

3、解析的方法,返回的是一个map集合
static Map<String,Setting> parseSettings(Context context,String fileName) {
		Map<String,Setting> settingMap = new HashMap<String,Setting>();
		List<SettingArray> settingArray = new ArrayList<SettingArray>();
		List<SettingExtra> settingExtras = null;

		Setting readSetting = null;
		SettingArray readSettingArray = null;
		SettingExtra readSettingExtra = null;

		XmlPullParser xmlResParser = null;
		try {
			String packageName = context.getPackageName();
			Resources resources = context.getPackageManager().getResourcesForApplication(packageName);

			Logger.d("read xml resource,filename = " + fileName);

			int resId = resources.getIdentifier(fileName,"raw",packageName);

			// 解析URL配置
			xmlResParser = Xml.newPullParser();
			xmlResParser.setInput(resources.openRawResource(resId),"utf-8");
			int eventType = xmlResParser.getEventType();
			while (eventType != XmlPullParser.END_DOCUMENT) {

				switch (eventType) {
				case XmlPullParser.START_TAG:
					if ("setting-array".equals(xmlResParser.getName())) {
						readSettingArray = new SettingArray();
						readSettingArray.setType(xmlResParser.getAttributeValue(null,"type"));
						readSettingArray.setIndex(Integer.parseInt(xmlResParser.getAttributeValue(null,"index")));
					}

					if ("setting".equals(xmlResParser.getName())) {
						readSetting = new Setting();
						readSetting.setType(xmlResParser.getAttributeValue(null,"type"));
					}

					if ("extras".equals(xmlResParser.getName())) {
						settingExtras = new ArrayList<SettingExtra>();
					}

					if ("extra".equals(xmlResParser.getName())) {
						readSettingExtra = new SettingExtra();
						readSettingExtra.setType(xmlResParser.getAttributeValue(null,"type"));
					}

					if ("des".equals(xmlResParser.getName())) {
						if (readSettingExtra != null) {
							readSettingExtra.setDescription(xmlResParser.nextText());
						} else if (readSetting != null) {
							readSetting.setDescription(xmlResParser.nextText());
						} else if (readSettingArray != null) {
							readSettingArray.setDescription(xmlResParser.nextText());
						}
					}

					if ("value".equals(xmlResParser.getName())) {
						if (readSettingExtra != null) {
							readSettingExtra.setValue(xmlResParser.nextText());
						} else if (readSetting != null) {
							readSetting.setValue(xmlResParser.nextText());
						}
					}

					break;
				case XmlPullParser.END_TAG:
					if ("setting".equals(xmlResParser.getName())) {
						if (readSetting != null) {
							if (readSettingArray != null) {
								readSettingArray.getSettingArray().add(readSetting);
							} else {
								settingMap.put(readSetting.getType(),readSetting);
							}
						}
						Logger.d(TAG,String.format("parse new setting --->%s",JSON.toJSONString(readSetting)));
						readSetting = null;
					}

					if ("setting-array".equals(xmlResParser.getName())) {
						settingArray.add(readSettingArray);
						Logger.d(TAG,String.format("parse new settingArray --->%s",JSON.toJSONString(readSettingArray)));
						readSettingArray = null;
					}

					if ("extras".equals(xmlResParser.getName())) {
						if (readSetting != null)
							for (SettingExtra extra : settingExtras)
								readSetting.getExtras().put(extra.getType(),extra);

						settingExtras = null;
					}

					if ("extra".equals(xmlResParser.getName())) {
						settingExtras.add(readSettingExtra);
						Logger.d(TAG,String.format("parse new settingExtra --->%s",JSON.toJSONString(settingExtras)));
						readSettingExtra = null;
					}
				}

				eventType = xmlResParser.next();
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
//			if (xmlResParser != null)
//				xmlResParser.close();
		}

		for (SettingArray array : settingArray) {
			if (array.getSettingArray().size() > array.getIndex()) {
				Setting setting = array.getSettingArray().get(array.getIndex());
				setting.setType(array.getType());
				settingMap.put(setting.getType(),setting);
			}
		}

		return settingMap;
	}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读