2012-01-17 12 views
6

Android-SDK के org.w3c.dom.Node.insertBefore का वर्णन निम्नलिखित कहते हैं: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):
मैं एक नया जावा-प्रोजेक्ट बनाया है, क्योंकि मैं अगर यह एक जावा आवेदन में काम करता है देखना चाहता था:

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 तक पहुँच जाता है, ऊपर दिखाए गए अपवाद फेंक दिया जाता है:

मैं भी इस फिर से परीक्षण करने के लिए एक नया एंड्रॉयड प्रोजेक्ट बनाया।

तो एक ही कोड सामान्य जावा में काम करता है, लेकिन एंड्रॉइड में नहीं। मेरे लिए यह अभी भी लगता है कि यह org.w3c.dom के अपाचे सद्भाव कार्यान्वयन में एक बग है। कोई अन्य विचार?

+1

मैं शर्त लगाऊंगा कि यह आपका कोड है, लाइब्रेरी नहीं। सीखना कि आप समस्या है एक लंबा, कठिन सबक है। – duffymo

+1

बेशक यह हो सकता है कि यह मेरी गलती है। यही कारण है कि मैं यहां पहले सवाल पूछता हूं (इससे पहले कि मैं एक बग सबमिट करता हूं) और सहायता या किसी को पुन: उत्पन्न करने के लिए कहें। लेकिन एंड्रॉइड में org.w3c.dom के अपाचे-सद्भाव कार्यान्वयन के साथ मेरी पहली समस्या नहीं है - कार्यान्वयन में अन्य बग या अंतराल भी हैं, साथ ही डेवलपर्स द्वारा पहले ही पुष्टि की गई है और जिसने मेरी ज़िंदगी को कठिन बना दिया है ^^। तो हो सकता है कि कुछ पूर्वाग्रह हो ^^ – Marc

उत्तर

0

यदि विवरण में doc!=null जोड़ें। ऐसा लगता है कि आपका डॉक्टर ऑब्जेक्ट शून्य है।

+0

मैंने दस्तावेज़ जोड़ा! = शून्य, लेकिन मुझे एक ही अपवाद मिलता है।मुझे पूरा यकीन है कि यह एक बग है, क्योंकि पूरा कोड काम करता है यदि कोई वैध पैरा को दूसरे पैरामीटर के रूप में देता है। मैं इस दस्तावेज़ को जोड़ दूंगा! = मेरी मूल पोस्ट में भी नल जांचें ताकि यह अन्य पाठकों के लिए स्पष्ट हो। – Marc

3

यह org.apache.harmony.xml.dom से insertBefore के लिए 4.1.2 भी साथ कार्यान्वयन reproduced किया जा सकता है

public Node insertBefore(Node newChild, Node refChild) throws DOMException { 
    LeafNodeImpl refChildImpl = (LeafNodeImpl) refChild; 

    if (refChildImpl.document != document) { 
     throw new DOMException(DOMException.WRONG_DOCUMENT_ERR, null); 
    } 

    if (refChildImpl.parent != this) { 
     throw new DOMException(DOMException.HIERARCHY_REQUEST_ERR, null); 
    } 

    return insertChildAt(newChild, refChildImpl.index); 
} 

है आप कोई भी जाँच करता है देख सकते हैं अगर refChildImpl रिक्त है तो refChildImpl.document!=document फेंकता NullPointerException यदि निम्न सही है इस कार्यान्वयन किसी भी मतलब नहीं है

Android-SDK के org.w3c.dom.Node.insertBefore का वर्णन निम्नलिखित कहते हैं:

सार्वजनिक सार नोड insertBefore (नोड newChild, नोड refChild)

आवेषण मौजूदा चाइल्ड नोड refChild से पहले नोड newChild। यदि रीफिल्ल्ड शून्य है, तो बच्चों की सूची के अंत में नया बच्चा डालें।

संबंधित मुद्दे