Java 读取自定义字符串资源
我使用2个不同的xml文件来存储我需要的数据。启动应用程序时,我想读取这两个资源并从中生成对象。 让我解释一下,我在做什么: 第一个资源存储的事件名称如下:Java 读取自定义字符串资源,java,android,xml,Java,Android,Xml,我使用2个不同的xml文件来存储我需要的数据。启动应用程序时,我想读取这两个资源并从中生成对象。 让我解释一下,我在做什么: 第一个资源存储的事件名称如下:/res/values/event\u names.xml <?xml version="1.0" encoding="utf-8"?> <resources> <string name="event_a">AAAA</string> <string name="event
/res/values/event\u 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>
<?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>
请注意,事件名称和时间的名称是通用的。启动时,应用程序将首先读取事件名称,然后找出相应的时间戳
我能按我计划的方式做吗?我必须从名称资源中读取所有标识符,然后根据该标识符获取时间。为什么不将所有事件名称添加为
中的第一个元素。这样,您的事件名称将与其各自的时间紧密耦合。Quick idea:
您可能可以将所有信息以JSON格式保存在资产文件夹中的一个文件中,如注释中所建议的@amalBit。
这样,您就不必进行解析,因为Android附带了一个JSON库,并且您不需要解析任何自定义格式的txt
或者以一种更丑陋的方式(我不是在写这个呵呵),您可以在一个条目中直接将JSON放在strings.xml中。这样可以避免您手动读取资产。但我不会这么做,因为strings.xml还有另一个含义(那就是存储要翻译的字符串)
如果您愿意,我可以稍后向您发布第一个案例的一些代码。
<!-- ================= -->
<!-- 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>
@数组/事件\u a
@数组/事件
@数组/事件\u c
事件A
02:00
11:30
17:00
事件B
03:00
12:30
18:00
事件C
04:00
13:30
19:00
代码:
List events=new ArrayList();//将所有事件放入列表中
TypedArray eventMappings=getResources().obtainTypedArray(R.array.event_列表);
对于(int-mappingVar=0;mappingVar
希望对您有所帮助:-)另外一个选项是,您可以在资产文件夹中添加自定义资源并访问资产。哦。。是 啊ofc。。好的,如何从该资源中读取所有字符串数组?好的,您不能一次读取所有数组数据。您需要使用其id读取数组资源,如getStringArray(R.array.event_a)。但是我发布的逻辑将删除对strings.xml的额外调用,因为您将首先使用id R.string.event_a,然后使用它访问数组,而实际上您可以在一次获取中完成它。:/。。。因为我不想依赖硬编码。。。
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