воскресенье, 22 мая 2011 г.

Start...


Идея приложения заключается в том, чтобы создать мобильный аналог сайту А именно описанию существующих карт и ресурсов. Для хранения многочисленных ресурсов¸ я решил использовать XML. 
Вот пример созданного XML:

<Areas>
<zone>
<place Type="5" Name="1">
<item Name="Antidote Herb"></item>
<item Name="Sap Plant"></item>
<item Name="Ivy"></item>
<item Name="Green Seed"></item>
</place>
</zone>
</Areas>

Для каждой карты был создан свой XML файл. <Zone> - это зона в данной карте, <place> - конкретный вид ресурса.
Так как с Java мне работать не доводилось, первым разочарованием для меня стало отсутствие нормального класса для парсинга XML. 
Пришлось по рыться в интернете для описания работы DOM в Android. Первой ссылкой стала вот эта.
 Немного ее изменив получил вот такой метод для вытягивания инфы для каждой зоны
static public View GetResourseFromZone (int xmlArea, int zoneID, Context mContext )
{
View row_View;
View table_View;
try
{
InputStream xmlStream = mContext.getResources().openRawResource(xmlArea);
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document xmlDoc = builder.parse(xmlStream);
xmlDoc.getDocumentElement().normalize();
NodeList elements = xmlDoc.getElementsByTagName("zone");
LayoutInflater lInflater = LayoutInflater.from(mContext);
table_View = lInflater.inflate(R.layout.table_model, null);
TableLayout tLayout = (TableLayout) table_View.findViewById(R.id.table_model);
Node node = elements.item(zoneID);
for (int i = 0; i < node.getChildNodes().getLength(); i++) {
if (node.getChildNodes().item(i).getNodeType()==Node.ELEMENT_NODE) {
row_View = lInflater.inflate(R.layout.row_model, null);
TextView placeNumber = (TextView) row_View.findViewById(R.id.textView1); 
TextView res = (TextView) row_View.findViewById(R.id.textView2);
ImageView ico_img = (ImageView) row_View.findViewById(R.id.ico);
Node place_node = node.getChildNodes().item(i);
NamedNodeMap place_atr = place_node.getAttributes();
placeNumber.setText( place_atr.getNamedItem("Name").getNodeValue());
ico_img.setImageResource(ico_id[Integer.parseInt(place_atr.getNamedItem("Type").getNodeValue())]);
for (int j = 0; j < place_node.getChildNodes().getLength(); j++) {
if (place_node.getChildNodes().item(j).getNodeType() == Node.ELEMENT_NODE) {
res.append(place_node.getChildNodes().item(j).getAttributes().getNamedItem("Name").getNodeValue()+";"+"\n");
}
}
tLayout.addView(row_View);
}
}
}
catch (Exception e) {
LayoutInflater lInflater = LayoutInflater.from(mContext);
table_View = lInflater.inflate(R.layout.table_model, null);
}
return table_View;
}




Комментариев нет:

Отправить комментарий