В моем приложении я анализирую xml, фрагмент структуры, создающий проблемы:
<answers>
<answer value="A">A</answer>
<answer value="B">B</answer>
<answer value="C">C</answer>
</answers>
Я анализирую его с XML DOM:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new InputSource(url.openStream()));
doc.getDocumentElement().normalize();
, который прекрасно работает, и в зависимости от пунктов ответа я создаю RadioButtons следующим образом:
NodeList answers = doc.getElementsByTagName("answers").item(0).getChildNodes();
int j = 0;
RadioGroup group = new RadioGroup(this);
RadioButton button1 = new RadioButton(this);
button1.setId((i+1)*100+(j++));
button1.setText(answers.item(1).getChildNodes().item(0).getNodeValue());
button1.setTextColor(Color.BLACK);
RadioButton button2 = new RadioButton(this);
button2.setId((i+1)*100+(j++));
button2.setText(answers.item(2).getChildNodes().item(0).getNodeValue());
button2.setTextColor(Color.BLACK);
RadioButton button3 = new RadioButton(this);
button3.setId((i+1)*100+(j));
button3.setText(answers.item(3).getChildNodes().item(0).getNodeValue());
button3.setTextColor(Color.BLACK);
Этот фрагмент кода отлично работает в эмуляторе SDK v.7 (Android 2.0), в то время как мой HTC Desire работает на Android 2.1u1 (так SDK v.8)
Но в устройстве я получаю сообщение об ошибке в этой строке button2.setText(answers.item(2).getChildNodes().item(0).getNodeValue());
, предполагая, что в ответах нет .item(2)
, но это должно быть ... Я отлаживал этот код в эмуляторе и обнаружил, что answers.item(0)
TextNode
, содержащий имя узла XML «ответы» ...
Но это правда, я немного запутался, и все разбирается при синтаксическом анализе этого XML, так как мне все еще приходится подсчитывать, насколько я глубоко и когда вызывать какой индекс по какому элементу (узлу) ... Но все же я обнаружил, что эта реализация намного проще, чем использование SAX
...
Есть ли что-то похожее на SimpleXml
из PHP в Java ???
В любом случае, моя главная проблема: как получается, что приложение отлично работает в эмуляторе, в то время как на устройстве оно выдает NullPointerException
в строке, где я пытаюсь установить текст для button2 ???
Большое спасибо за помощь !!!