В моем приложении я разбираю 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
в строке, где я пытаюсь установить текст для кнопки2???
Большое спасибо за помощь!!!
button1.setText(answers.item(1).getChildNodes().item(0).getNodeValue());
обрабатывалось без ошибок и значение выводилось, а следующий элементbutton2.setText(answers.item(2).getChildNodes().item(0).getNodeValue());
выдавал ошибку... Поэтому я вообще не понимаю... - person shadyyx   schedule 05.05.2011