سؤال

تم اقتصاص مشكلة غريبة ... قمت بفحص العديد من مواقع الويب ولكنها لم تتمكن من العثور على أي شيء خاطئ في الكود ... لكنه يعود NullPointerException...

try { 

    SAXParserFactory f = SAXParserFactory.newInstance();
    SAXParser parser = f.newSAXParser();
    XMLReader reader = parser.getXMLReader();
    reader.setContentHandler(handler);
    System.out.println(uri_this);
    reader.parse(new InputSource(url_this.openStream())); // i get nullpointerexception here 

} catch (NullPointerException e) {
    System.out.println(e);
}

في بيان الصيد لقد اشتعلت NullPointerException وجعلها طباعة الخطأ.

ال ContentHandler على ما يرام لأنني حصلت على ملفات محلات للملفات الصغيرة ولكن بالنسبة للملفات الكبيرة، لا يبدو أنها تعمل. ما المشكلة؟ أو هل أحتاج إلى بعض التخزين المؤقت للملفات الكبيرة؟ أنا جاهل وجربت كل الإمكانيات باستثناء التخزين المؤقت لأنني لا أعرف الترميز لذلك.

أحسب 1 شيء: يتم تحرير كائن مصدر الإدخال قبل reader.parse يمكن أن تنتهي. أنا لا أفهم لماذا يحدث.

ال LogCat يعطي ما يلي (الجزء الخلفي فقط):

01-06 15:12:27.145: INFO/System.out(319): http://mywebsite.com/products_xml.php?cPath=43
01-06 15:12:31.094: DEBUG/dalvikvm(319): GC freed 4031 objects / 203424 bytes in 189ms
01-06 15:12:31.505: DEBUG/dalvikvm(100): GC freed 3326 objects / 190192 bytes in 283ms
01-06 15:12:34.274: DEBUG/dalvikvm(319): GC freed 1153 objects / 80432 bytes in 146ms
01-06 15:12:34.646: INFO/System.out(319): java.lang.NullPointerException

أحصل على عنوان URL "URL_THIS" 4M البناء كجدات.

هل كانت مفيدة؟

المحلول 2

يا ثناكس كل منكم. حصلت على خطأي. في الواقع في حالة واحدة، لم يكن هناك أي نص بين العلامة البديلة والنهاية ... وبالتالي كان المتغير الذي قمت بتخزين النص به كان فارغا ... اتصلت. ToString () على ذلك. مما أدى إلى استثناء - nullpointerException. thanx جميع 4 مساعدة اور.

نصائح أخرى

لا توجد معلومات كافية لمساعدتك هنا ولكن لاحظت أنك طباعة متغير يسمى uri_this. في قذيفة ولكن dereference عنوان URL أن تحلل؟ لذلك فقط لأن شاشة LIGFILE http://mywebsite.com/product_xml.php؟cpath=43. لا يعني ذلك تلقائيا، أن المتغير عنوان URL تتم تهيئته وأيضا يحتوي على تلك السلسلة.

أو قد يكون ذلك أن طريقة OpenStream () على كائن URL (أيا كان النوع الأمريكي) إرجاع NULL كما قلت - لا توجد معلومات كافية في snipplet قصيرة لحل مشكلتك.

هتافات.

لقد أصدرت للتو مكتبة لجعل XML تحليلا على نظام Android 10x أسهل مما هو عليه حاليا. إنها طبقة تجريدية صغيرة جدا تجلس أعلى مكتبات تحليل XML الموجودة التي توفرها وقت التشغيل وتتيح لك استخدام مسارات تشبه XPath بسيطة للعناصر للحصول على القيم المحددة مرة أخرى.

تأثير الأداء لا يوجد شيء تقريبا في أعلى عملية التحليل الموجودة، إنه تطبيق بسيط للغاية / نظيف:http://www.thebuzzmedia.com/software/simple-java-xml-parser-sjxp/

تحقق من عنوان URL أعلاه http://www.androidhive.info/11/11/11/android-xml-parsing-Tutorial/

التغييرات التي تصنع في xmlparser.java

DefaultHttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url);
HttpResponse httpResponse = httpClient.execute(httpGet);
HttpEntity httpEntity = httpResponse.getEntity();
xml = EntityUtils.toString(httpEntity);

وسيعمل إن شاء الله ...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top