Fehler anhand des log Files finden?

  • Antworten:54
  • OffenNicht stickyNicht beantwortet
Gelöschter Account
  • Forum-Beiträge: 227

30.12.2014, 19:18:00 via Website

Passwort für diesen Account ist: test123
War einfach heruaszufinden ^^

— geändert am 23.02.2015, 19:45:23

Antworten
Ludy
  • Admin
  • Forum-Beiträge: 7.888

30.12.2014, 20:02:57 via Website

Hallo Kurt,

deine nodelist ist leer daher kommt der Fehler

@Override
protected void onPostExecute(Void args) {   //Methode zum eig. Parsen und Ausgeben auf Screen bzw. Schreiben in Stringarray
    for (int temp=0; temp<nodelist.getLength(); temp++) { 
        Node nNode = nodelist.item(temp); 

mach Bitte nen try/catch drum um das zu prüfen und du solltest ein Resultat sehen.

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

Lebensmittelwarnung-App

Download Samsung Firmware Tool

Meine Wunschliste

Telegram News Feed

Antworten
  • Forum-Beiträge: 424

30.12.2014, 20:03:04 via App

In Zeile 181 befindet sich der Fehler.

Was stehtn da ?

LG,
Stefan

— geändert am 30.12.2014, 20:04:19

Antworten
Gelöschter Account
  • Forum-Beiträge: 227

30.12.2014, 20:17:42 via Website

Danke Ludy, werde ich gleich mal probieren.

@Stefan:
protected void onPostExecute(Void args) {
Zeile 181 --> for (int temp=0; temp Node nNode = nodelist.item(temp);

Antworten
Gelöschter Account
  • Forum-Beiträge: 227

01.01.2015, 21:12:16 via Website

Passwort für diesen Account ist: test123
War einfach heruaszufinden ^^

— geändert am 23.02.2015, 19:45:29

Antworten
Ludy
  • Admin
  • Forum-Beiträge: 7.888

01.01.2015, 21:18:35 via Website

Genau, aber ich würde direkt die "NullPointerException" nehmen, falls noch andere Errors kommen, da Du weist das es die NullPointer ist.
Ein Fehler fällt schneller auf, wenn die App abstürtzt ;-)

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

Lebensmittelwarnung-App

Download Samsung Firmware Tool

Meine Wunschliste

Telegram News Feed

Antworten
Gelöschter Account
  • Forum-Beiträge: 227

02.01.2015, 12:00:24 via Website

Gut mach ich.

Jetzt habe ich noch einen Error:

Error--> private static String getNode(String sTag, Element eElement) {
NodeList nList = eElement.getElementsByTagName(sTag).item(0).getChildNodes();
Node nValue = (Node) nList.item(0);
return nValue.getNodeValue();
}

Meldung: The method getNode cannot be declared static; static methods can only be declared in a static or top level type

Antworten
  • Forum-Beiträge: 11.185

02.01.2015, 12:04:04 via Website

Poste mal bitte deinen aktuellen Code.
Warscheinlich hast du eine innerClass definiert und in dieser sind statische Methoden nicht zugelassen.

LG

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Gelöschter Account
  • Forum-Beiträge: 227

02.01.2015, 12:27:39 via Website

Passwort für diesen Account ist: test123
War einfach heruaszufinden ^^

— geändert am 23.02.2015, 19:45:36

Antworten
  • Forum-Beiträge: 11.185

02.01.2015, 12:35:42 via Website

Entweder su lässt das static Attribut weg, denn wozu brauchst du es?
Oder du machst für deinen AsyncTask Downlader in eine eigene Datei, wobei ich das mit der Datei unabhängig vom Fehler machen würde denn es ist übersichtlicher wenn eigene Klassen auch in eigenen Dateien sind.

Also Klasse in eigene Date -> Fehler weg.
Gleichzeitig kannst du noch das static Attribut entfernen.

LG

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Gelöschter Account
  • Forum-Beiträge: 227

02.01.2015, 12:45:07 via Website

Passwort für diesen Account ist: test123
War einfach heruaszufinden ^^

— geändert am 23.02.2015, 19:45:42

Antworten
  • Forum-Beiträge: 11.185

02.01.2015, 12:52:53 via Website

Du musst nur das "static" attribut löschen.
Und ja am besten eine eigene Date für den AsyncTask erstellen

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Gelöschter Account
  • Forum-Beiträge: 227

02.01.2015, 17:12:20 via Website

Gut. Wie mach is das dann mit der Übergabe zwischen den beiden Dateien?

Antworten
  • Forum-Beiträge: 1.904

03.01.2015, 12:30:47 via App

Kurt

Gut. Wie mach is das dann mit der Übergabe zwischen den beiden Dateien?

Du musst dich nicht darum kümmern. Du kannst 10 Klassen in eine Datei tun oder auch in 10 einzelne. Das ist in deinem Fall egal.

Außerdem würde ich das static da lassen, weil dadurch klar wird, dass die Methode unabhängig von Klassenvariablen ist.

Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀

Why Java? - Because I can't C#

Antworten
Gelöschter Account
  • Forum-Beiträge: 227

07.01.2015, 18:50:35 via Website

Ja wenn ich das static lasse, dann habe ich einen Error.

Meldung: The method getNode cannot be declared static; static methods can only be declared in a static or top level type.

Antworten
  • Forum-Beiträge: 11.185

07.01.2015, 18:54:03 via Website

Hast du deinen AsyncTask jetzt in eine eigene Datei ausgelagert?

Poste bitte nochmal deinen Code.

LG

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Gelöschter Account
  • Forum-Beiträge: 227

07.01.2015, 20:17:32 via Website

Soll ich den kompletten Parser in ein eigene Activity geben? Wenn ja, wie bekomme ich dann die Werte vom Parser in andere Activities?

Antworten
  • Forum-Beiträge: 11.185

07.01.2015, 20:21:06 via App

Eine eigene Activity brauchst du auf keinen Fall!
Du erstellst eine neue Java Datei und kopiersr deinen AsyncTask ein. mehr musst du nicht ändern denn die Daten kommen trotzdem an, denn eine Klasse ist etwas anderes als eine Activity.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Gelöschter Account
  • Forum-Beiträge: 227

08.01.2015, 15:01:45 via Website

d.h. rechtsklick -> new class und dann den Teil ab:

private class DownloadXML extends AsyncTask

einfügen?

— geändert am 08.01.2015, 15:04:11

Antworten
  • Forum-Beiträge: 11.185

08.01.2015, 19:02:47 via App

Ja einfach in ne neue Datei.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Gelöschter Account
  • Forum-Beiträge: 227

09.01.2015, 19:12:28 via Website

Gut hab ich. Jetzt habe ich folgenden Error:
nodelist cannot be resolved

Antworten
  • Forum-Beiträge: 11.185

09.01.2015, 19:48:56 via Website

Wieder das gleiche wie im anderen Thread ;)
Einfach eine globale nodeList anlegen, da diese Variable beim Kopieren warscheinlich nicht mitkopiert wurde.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Gelöschter Account
  • Forum-Beiträge: 227

10.01.2015, 20:34:50 via Website

Wenn ich die Variable rüberkopiere kommt ein Error:
NodeList nodelist; //nodelist import expected

das import habe ich aber. Wenn ich es mit ctrl umschalt o versuche wird mir der nodelist import entfernt.

Wenn ich die Variable nicht rüberkopiere und einfach public NodeList nodelist; mache ändert sich auch nichts.

Antworten
  • Forum-Beiträge: 11.185

11.01.2015, 11:36:31 via Website

Du brauchst en Import:

import org.w3c.dom.NodeList;

Und die Variable

NodeList nodelist;

Dann sollte es gegen, falls nien poste deinen Code (mit Imports)

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Gelöschter Account
  • Forum-Beiträge: 227

11.01.2015, 11:58:57 via Website

Passwort für diesen Account ist: test123
War einfach heruaszufinden ^^

— geändert am 23.02.2015, 19:45:54

Antworten
  • Forum-Beiträge: 11.185

11.01.2015, 12:01:19 via Website

Du musst die Nodelist in der Klasse definieren, ausserhalb macht es keinen Sinn und funktioniert nicht:
import java.net.URL;
import java.util.ArrayList;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;

import android.os.AsyncTask;
import android.util.Log;

public class DownloadXML extends AsyncTask {
NodeList nodelist;

@Override
protected Void doInBackground(String... Url) {
    try {
        URL url = new URL(Url[0]);
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        Document doc = db.parse(new InputSource(url.openStream())); 
        doc.getDocumentElement().normalize();
        nodelist = doc.getElementsByTagName("park");
    }
    catch (Exception e) {
        Log.e("Error", e.getMessage());
        e.printStackTrace();
    }
    return null;
}

@Override
protected void onPostExecute(Void args) {

    try {
    for (int temp=0; temp<nodelist.getLength(); temp++) {
        Node nNode = nodelist.item(temp);
        if (nNode.getNodeType() == Node.ELEMENT_NODE) {
            Element eElement = (Element) nNode;

            //Elemente
        }
    }
}
catch (Exception e) {
e.printStackTrace();
}

}

private static String getNode(String sTag, Element eElement) {
NodeList nList = eElement.getElementsByTagName(sTag).item(0).getChildNodes();
Node nValue = (Node) nList.item(0);
return nValue.getNodeValue();
}
}

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Gelöschter Account
  • Forum-Beiträge: 227

06.02.2015, 15:03:00 via Website

Passwort für diesen Account ist: test123
War einfach heruaszufinden ^^

— geändert am 23.02.2015, 19:46:00

Antworten
  • Forum-Beiträge: 1.904

06.02.2015, 15:43:25 via App

Lies dir den Text bitte mal durch. (Oder ist das zu viel verlangt?)

Ein kleines bisschen muss man Englisch können, um das zu verstehen. Das sollte aber kein Problem sein.

Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀

Why Java? - Because I can't C#

Antworten
  • Forum-Beiträge: 424

06.02.2015, 15:45:18 via App

Steht eh im Logfile ^^

Internet Permission fehlt im Manifest.

— geändert am 06.02.2015, 15:45:37

Antworten
  • Forum-Beiträge: 1.904

06.02.2015, 15:46:26 via App

Stefan W

Steht eh im Logfile ^^ [...]

Das meinte ich ja 😉

Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀

Why Java? - Because I can't C#

Antworten
Gelöschter Account
  • Forum-Beiträge: 227

06.02.2015, 16:04:16 via Website

Ja das hab ich aber schon im Manifest:

<uses-permission android:name="android.permission.INTERNET" />

— geändert am 06.02.2015, 16:04:47

Antworten
Gelöschter Account
  • Forum-Beiträge: 227

06.02.2015, 16:17:59 via Website

Passwort für diesen Account ist: test123
War einfach heruaszufinden ^^

— geändert am 23.02.2015, 19:46:08

Antworten
Gelöschter Account
  • Forum-Beiträge: 227

06.02.2015, 16:34:56 via Website

Passwort für diesen Account ist: test123
War einfach heruaszufinden ^^

— geändert am 23.02.2015, 19:46:14

Antworten
  • Forum-Beiträge: 1.904

06.02.2015, 17:20:33 via App

Gut gesehen Ludy 👍

@Kurt: Willst du das bei jedem Fehler jetzt so machen? :

  1. Du sagst: Die App stützt ab
  2. Wir fragen ob im LogCat ein Fehler ist
  3. Du postest den LogCat
  4. Wir sagen dir die Zeile, die im LogCat steht
  5. Du postest die Zeile ausm Code und erwartest, dass wir das fixen

Zum Fehler: Nachdem du setAdapter aufgerufen hast, wird das ListView gerendert. Dafür muss sie wissen, wieviele Items es gibt. Das fragt sie mit der getItemsCount(). Da dein Adapter anscheinend von ArrayAdapter erbt und im LogCat steht, dass die super Methode aufgerufen wurde und du sie nicht überschrieben hast, versucht der Adapter(glaube ich, ich hab mir den Source Code nicht angeguckt) anhand der im super Konstruktor gegebenen Parameter die Anzahl der Items herauszufinden. Da scheint etwas schief zu gehen.
Mach dir am besten einen BreakPoint in der Zeile im ArrayAdapter.
Ich vermute, dass die Liste oder das Array, die/das im super Konstruktor übergeben wurde, null ist.

Korrigier mich, wenn ich bei meinen Vermutungen falsch liege.

Edit: Stefan hats in Kurzform geschrieben 😁

— geändert am 06.02.2015, 17:22:12

Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀

Why Java? - Because I can't C#

Antworten
Gelöschter Account
  • Forum-Beiträge: 227

07.02.2015, 16:21:26 via Website

Passwort für diesen Account ist: test123
War einfach heruaszufinden ^^

— geändert am 23.02.2015, 19:46:21

Antworten
  • Forum-Beiträge: 11.185

07.02.2015, 18:29:17 via Website

Dein Code läuft unweigerlich auf eine NullPointerException hinaus:

OnTaskCompleted otc = new OnTaskCompleted() {

    @Override
    public void onTaskCompleted(ArrayList<WP> list) {
        neue_liste = list; //<-- Hier setzst du zwar die Liste, da muss aber auch alles weitere nach dem download rein...
    }
};

new DownloadXML(otc).execute(URL);  //Aufruf des Parsers

//------- Ab hier muss alles in die onFinished, da ja erst auf den fertigen download gewartet werden muss
ListViewAdapter adapter = new ListViewAdapter(this, neue_liste);
setListAdapter(adapter);

this.getListView().setOnItemClickListener(new OnItemClickListener() {
     public void onItemClick(AdapterView<?> a, View v, int position, long id) {
        Intent i = new Intent(FirstActivity.this, SecondActivity.class);
        startActivity(i);
        }
     } 
});

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Gelöschter Account
  • Forum-Beiträge: 227

08.02.2015, 10:07:19 via Website

Passwort für diesen Account ist: test123
War einfach heruaszufinden ^^

— geändert am 23.02.2015, 19:46:37

Antworten
  • Forum-Beiträge: 11.185

08.02.2015, 10:23:00 via Website

Dein Fehler ist wahresceinlich eine Folge dieses Falschen Codes:

super((Context) onTaskCompleted, R.layout.rowlayout_layout, list);
this.context = (Activity) onTaskCompleted;

Du musst weiterhin den Contest übergeben:

public ListViewAdapter(Context ctx, ArrayList list) {
    super(ctx, R.layout.rowlayout_layout, list);
    this.context = ctx;
    this.list = list;
  }

Und beim aufrufen dann:

  ListViewAdapter adapter = new ListViewAdapter(FirstActivity.this, neue_liste); //Context der Activity übergeben
                setListAdapter(adapter);

Das geht nbur so, da du in einem Listener in einer anonymen Klasse bist, da hat das schlüsselwort this eine andere Bedeutung.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Gelöschter Account
  • Forum-Beiträge: 227

08.02.2015, 11:05:46 via Website

Gut hab ich geändert.
Nur passt ihm jetzt context.getLayoutInflater() nicht da getLayoutInflater() für den Typ Context nicht definiert ist.

Antworten
  • Forum-Beiträge: 11.185

08.02.2015, 11:54:29 via Website

Dann must du wieder auf die Activity var umsteigen, wenn das mit einem Context nicht geht.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Gelöschter Account
  • Forum-Beiträge: 227

08.02.2015, 15:54:26 via Website

Passwort für diesen Account ist: test123
War einfach heruaszufinden ^^

— geändert am 23.02.2015, 19:46:46

Antworten
  • Forum-Beiträge: 11.185

08.02.2015, 15:57:16 via Website

Irgend ein Fehler beim Parsen?
Was sagt der log, bzw. der debugger?

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Gelöschter Account
  • Forum-Beiträge: 227

08.02.2015, 16:23:50 via Website

Passwort für diesen Account ist: test123
War einfach heruaszufinden ^^

— geändert am 23.02.2015, 19:35:08

Antworten
  • Forum-Beiträge: 11.185

08.02.2015, 16:27:31 via Website

Es hast mit deinem Parser zutun.
Der sagt:

: java.lang.NumberFormatException: Invalid int: "4,62"

Was bedeutet das jetzt für dich?

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Gelöschter Account
  • Forum-Beiträge: 227

08.02.2015, 16:37:54 via Website

D.h. der Wert ist 4,62 (float Wert) aber der Parser will ein Int.

— geändert am 08.02.2015, 16:38:20

Antworten
  • Forum-Beiträge: 11.185

08.02.2015, 16:40:03 via Website

Ja das gibt es:

float f = Float.parseFloat("0.0065");

Du darfst dann aber auch nicht vergessen den Typ der variable in deiner WP Klasse zu ändern.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Gelöschter Account
  • Forum-Beiträge: 227

08.02.2015, 16:54:32 via Website

Danke! Dann kommt aber wieder die selbe Meldung:
02-08 16:52:43.406: W/System.err(21835): java.lang.NumberFormatException: Invalid float: "4,62"

Antworten
  • Forum-Beiträge: 424

08.02.2015, 17:01:16 via App

Wegen dem Komma, da gehört ein Punkt hin. Also 4.62 und nicht 4,62

Antworten