NullPointerException abfangen

  • 8 Antworten
  • Letztes Antwortdatum
L

Lainio

Ambitioniertes Mitglied
3
Hallo liebe Leute,

ich bin dabei eine XML-Datei aus dem Internet zu laden und zu parsen.

Letztens habe ich gemerkt das ich kein Internet habe und probeweise die App gestartet und gemerkt, das die App abstürzt :/

Logcat sagt:

PHP:
Caused by: java.lang.NullPointerException: println needs a message
            at android.util.Log.println_native(Native Method)
            at android.util.Log.e(Log.java:232)
            at de.lenox.lenox.app.ListViewActivity$DownloadXMLFiles.doInBackground(ListViewActivity.java:185)
            at de.lenox.lenox.app.ListViewActivity$DownloadXMLFiles.doInBackground(ListViewActivity.java:153)
            at android.os.AsyncTask$2.call(AsyncTask.java:288)
            at java.util.concurrent.FutureTask.run(FutureTask.java:237)
************at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
************at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
************at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
************at java.lang.Thread.run(Thread.java:841)


doInBackground:
PHP:
        protected ArrayList<HashMap<String, String>> doInBackground(URL... urls) {
            try {
                XMLParser parser = new XMLParser();
                String xml = parser.getXMLFromUrl("http://testseite.de/test.xml");
                Document doc = parser.getDomElement(xml);

                NodeList nl = doc.getElementsByTagName(KEY_SYSTEM);

                for (int i = 0; i < nl.getLength(); i++) {

                    // Neue HashMap erstellen
                    HashMap<String, String> map = new HashMap<String, String>();
                    Element e = (Element) nl.item(i);

                    // Jedes Kind-Knoten zur HashMap
                    map.put(KEY_UUID, parser.getValue(e,KEY_UUID));
                    map.put(KEY_NAME, parser.getValue(e,KEY_NAME));
                    map.put(KEY_JOBTITLE, parser.getValue(e,KEY_JOBTITLE));
                    map.put(KEY_JOBINFO, parser.getValue(e,KEY_JOBINFO));
                    map.put(KEY_IMAGE, parser.getValue(e,KEY_IMAGE));

                    //Hashmap zur ArrayList hinzufügen
                    menuItems.add(map);

                }
            } catch (NullPointerException e) {
                return null;
            }

            return menuItems;
        }

Ist das so richtig? ist das nicht der Catch Befehl um die App nicht abstürzen zu lassen?

oder ist das ein falscher Ansatz?

Die App soll bei fehlendem Internet einfach nichts herunterladen und wenigstens das Interface laden.
 
MAN FÄNGT NIE MALS EINE NPE ! ! !

lg. Dagobert
 
Und wie löse ich nun das Problem einer abstürzenden App bei fehlender Internet-Verbindung ab?
 
Überprüfen auf null?

Aber das gehört wirklich zu den billigsten Grundlagen =)

lg.
 
Das ich null bekomme ist ja wohl offensichtlich wenn meine Methode versucht, eine XML-Datei aus dem Internet zu parsen, ich aber kein Internet habe :)

Die Frage ist an welcher Stelle ich was einbauen muss damit die App nicht abstürzt.
 
Das liegt nicht an deiner doInBackground direkt ...
Und du solltest Dagobert's Hinweis wirklich ernst nehmen:
Eine Nullpointer Exception gehört behandelt und nicht einfach abgefangen.

Aber zu deinen Fragen aus dem ersten Posting:
1) Nein.
2) Nein.
3) Ja.

Um nur zu laden, wenn Internetverbindung da, solltest du evtl. vorher prüfen,
ob du überhaupt eine Internetverbindung hast ? Klingt das nicht irgendwie logisch ?
Da gibt's sogar Methoden von Android spendiert, die du auch einfach nur Copy&Paste benutzen kannst.
Evtl. wäre es mal sinnvoll, zumindest ein Mindestmaß an Grundlagen zu erlernen ?

Das du die NPE einfach wegdrückst, ist Teil deines Problem's.
Nochmal: Bevor du überhaupt deine Netzverbindung nutzt, solltest du prüfen, ob du überhaupt ein Netz hast.

Grundsätzlich bei allen Zugriffen auf's Netz:
1) Prüfen ob Netz da
2) versuch, Verbindung aufzubauen
3) prüfen ob Verbindung geklappt hat
4) Daten lesen (schreiben genauso)
5) prüfen, ob Daten angekommen sind
6) Daten verarbeiten
 
  • Danke
Reaktionen: Lainio
Naja Prüfen ob du wirklich netz hast ist nett, aber nicht von nöten wie ich finde, da du dadurch immer noch nicht weißt ob das Netz stabil genug ist deine Daten durch zu bringen.
Aber in diesem Fall wird es bestimmt iwo eine Passende Exception geben (nein nicht NPE)

lg.
 
  • Danke
Reaktionen: Lainio
Wow ich danke euch für die Antworten!

DagobertDokate ich brauchte etwas um das zu verstehen :D

Danke euch!!
 
Zurück
Oben Unten