我以前遇到过和你类似的问题。我认为 Android 没有用于读取 res->values XML 文件中的键值对的工具。将 XML 文件保存在 assets 目录而不是 res-> values 目录中。然后,从您的活动中,读取资产文件夹中的 XML 文件。我认为以下代码有效。我没有测试它。如果它不起作用,请告诉我。
在您的资产文件夹中,您可以放置一个名为“myPoints”的 XML 文档。
<resources>
<point Pointz="Point1">
<item Xpoint="100.340"></item>
<item Ypoint="200.000"></item>
</point>
<point Pointz="Point2">
<item Xpoint="350.450"></item>
<item Ypoint="400.900"></item>
</point>
<end></end>
</resources>
在您的活动中:
Double Xpoint, Ypoint;
int PointNum;
//Call the ReadXML() method somewhere in onCreate
private void ReadXML() {
try {
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
XMLReader xr = sp.getXMLReader();
GetXML_Handler doingWork = new GetXML_Handler();
xr.setContentHandler(doingWork);
InputSource Isource = new InputSource(this.getActivity().getAssets().open("myPoints.xml"));
xr.parse(Isource);
} catch (IOException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
}
}
//This is a private class inside whatever Acitivity u are in.
private class GetXML_Handler extends DefaultHandler {
boolean foundWord = false;
int i = 0;
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
if (localName.equals("point")) {
foundWord = true;
PointNum = attributes.getValue("Pointz"); //so PointNum will either be saved as "Point1" or "Point2"
}
} else if (foundWord == true && localName.equals("item")) {
Xpoint = attributes.getValue(0);
Ypoint = attributes.getValue(1);
} else if (localName.equals("end")) {
foundWord = false;
}
} // End of startElement
}// End of Private Class GetXML_Handler
如果您坚持将 XML 文件保存在 res-> values 文件夹中,您可以通过两种方式保存点:第一种方式是在 X 和 Y 点之间交替。
<string-array name="points">
<item>100.340</item> //X coordinate #1
<item>200.000</item> //Y coordinate #1
<item>350.450</item> //X coordinate #2
<item>400.900</item> //Y coordinate #2
</string-array>
第二种方法是将其保存为 2 个数组。一个数组用于 X 坐标,1 个数组用于 Y 坐标。
<string-array name="Xpoints">
<item>100.340</item> //X coordinate #1
<item>350.450</item> //X coordinate #2
</string-array>
<string-array name="Ypoints">
<item>200.000</item> //Y coordinate #1
<item>400.900</item> //Y coordinate #2
</string-array>