Описание org.w3c.dom.Node.insertBefore Android-SDK говорит следующее:
public abstract Node insertBefore (Node newChild, Node refChild) <br/>
Inserts the node newChild before the existing child node refChild. <strong>If refChild is null, insert newChild at the end of the list of children.</strong>
Но если я сделаю следующее, я получу исключение NullPointerException, которое происходитв реализации insertBefore:
if(doc != null && doc.getFirstChild() != null && tmpNode != null)
doc.getFirstChild().insertBefore(tmpNode, null);
WARN/System.err(11029): at org.apache.harmony.xml.dom.InnerNodeImpl.insertBefore(InnerNodeImpl.java:86)
Я пробовал это с Android 2.2 и Android 2.3.3!
Для меня это кажется ошибкой.Кто-нибудь может подтвердить / воспроизвести это?
// edit (18.01.2012 13:05):
Я создал новый java-проект, потому что хотел посмотреть, работает ли он в java-приложении:
public static void main(String[] args) {
DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder;
try {
docBuilder = dbfac.newDocumentBuilder();
Document d = docBuilder.newDocument();
if(d != null){
d.appendChild(d.createElement("root"));
if(d.getFirstChild() != null){
d.getFirstChild().insertBefore(d.createElement("foo"), null);
System.out.println(d.getFirstChild().getFirstChild().getNodeName());
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
Этот код работает отлично.
Я также создал новый проект для Android, чтобы протестировать его снова:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder;
try {
docBuilder = dbfac.newDocumentBuilder();
Document d = docBuilder.newDocument();
if(d != null){
d.appendChild(d.createElement("root"));
if(d.getFirstChild() != null){
d.getFirstChild().insertBefore(d.createElement("foo"), null);
System.out.println(d.getFirstChild().getFirstChild().getNodeName());
}
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
Когда приложение достигает insertBefore, выдается исключение, показанное выше.
Так жекод работает в обычной Java, но не в Android.Мне все еще кажется, что это ошибка в реализации Apache Harmony в org.w3c.dom.Есть другие идеи?