读取自定义String资源

时间:2014-05-22 10:22:21

标签: java android xml

我使用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读取所有标识符,然后通过该标识符获取时间。

3 个答案:

答案 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

希望有所帮助: - )