我使用2个不同的xml文件来存储我需要的数据。启动App时,我想读取这两个资源并从中生成对象。
让我解释一下,我在做什么:
第一个资源存储事件名称,如下所示:/res/values/event_names.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="event_a">AAAA</string>
<string name="event_b">BBBB</string>
<string name="event_c">CCCC</string>
<string name="event_d">DDDD</string>
</resources>
秒资源存储给定事件开始的时间:/res/values/event_times.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="event_a">
<item>02:00</item>
<item>11:30</item>
<item>17:00</item>
</string-array>
<string-array name="event_b">
<item>03:00</item>
<item>12:30</item>
<item>18:00</item>
</string-array>
<string-array name="event_c">
<item>04:00</item>
<item>13:30</item>
<item>19:00</item>
</string-array>
<string-array name="event_d">
<item>04:30</item>
<item>10:00</item>
<item>15:00</item>
<item>20:00</item>
</string-array>
</resources>
请注意,事件名称和时间的名称在commom中。在启动时,应用程序将首先读取事件名称,然后找出它们的相应时间戳。
我可以按计划的方式进行吗?我必须从name-resource读取所有标识符,然后通过该标识符获取时间。
答案 0 :(得分:0)
为什么不将所有事件名称添加为<string-array>
中的第一个元素。这样,您的事件名称将与其各自的时间紧密耦合。
答案 1 :(得分:0)
快速创意:
您可以将所有信息保存在资产文件夹中的JSON格式的文件中,如注释中建议的@amalBit。 然后你不必进行解析,因为Android附带了一个JSON库,你不需要用自定义格式解析任何txt。
或者以一种更丑陋的方式(我不是在写这个hehe),你可以直接在一个条目中的strings.xml中直接放置一个JSON。这样可以避免手动阅读资产。但是我不会这样做,因为strings.xml有另一种含义(即存储你要翻译的字符串hehe)
如果您愿意,我可以稍后为您发布第一个案例的代码。
答案 2 :(得分:0)
<!-- ================= -->
<!-- Event Mappings -->
<!-- ================= -->
<eat-comment />
<array name="event_lists">
<item>@array/event_a</item>
<item>@array/event_b</item>
<item>@array/event_c</item>
</array>
<!-- =========== -->
<!-- Event Lists -->
<!-- =========== -->
<eat-comment />
<string-array name="event_a">
<item>Event A</item>
<item>02:00</item>
<item>11:30</item>
<item>17:00</item>
</string-array>
<string-array name="event_b">
<item>Event B</item>
<item>03:00</item>
<item>12:30</item>
<item>18:00</item>
</string-array>
<string-array name="event_c">
<item>Event C</item>
<item>04:00</item>
<item>13:30</item>
<item>19:00</item>
</string-array>
代码:
List<Event> events = new ArrayList<Event>(); // putting all events into a list
TypedArray eventMappings = getResources().obtainTypedArray(R.array.event_lists);
for (int mappingVar = 0; mappingVar < eventMappings.length(); mappingVar++) {
int eventId = eventMappings.getResourceId(mappingVar, 0);
String[] eventInfos = getResources().getStringArray(eventId);
Event event = new Event(); // your event domain class or whatever info holding class
for (int infosVar = 0; infosVar < eventInfos.length; infosVar++) {
switch (j) {
case 0:
event.setName(eventInfos[infosVar]);
break;
default:
event.addTime(eventInfos[infosVar]);
break;
}
events.add(event);
}
}
eventMappings.recycle(); // important
希望有所帮助: - )