Описание org.w3c.dom.Node.insertBefore в Android-SDK сказать следующее:org.w3c.dom.Node.insertПоэтому: NullPointerException, ошибка?
public abstract Node insertBefore (Node newChild, Node refChild)
Inserts the node newChild before the existing child node refChild. If refChild is null, insert newChild at the end of the list of children.
Но если я следующий я получаю 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!
Для меня это кажется ошибкой. Может ли кто-нибудь подтвердить/воспроизвести это?
// редактировать (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();
}
}
Этот код работает отлично.
Я также создал новый проект андроида, чтобы проверить это снова:
@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 org.w3c.dom. Любые другие идеи?
Держу пари, это ваш код, а не библиотека. Изучение того, что вы проблема, - это долгий трудный урок. – duffymo
Конечно, может быть, это моя вина. Вот почему я сначала задаю этот вопрос (прежде чем я отправлю ошибку) и попрошу о помощи или кого-то воспроизвести это. Но это не первая проблема с реализацией apache-гармонии org.w3c.dom в android - есть и другие ошибки или пробелы в реализации, которые уже были подтверждены разработчиками и которые усложнили мою жизнь ^^. Так что, возможно, есть некоторые предрассудки ^^ – Marc