Programmier Tutorial - Apps für Android entwickeln - XML Daten auslesen und anzeigen in Android

Programmier Tutorial: Apps für Android entwickeln – Teil 9: XML-Daten auslesen und anzeigen in Android


Im neunten Teil unseres großen Android™ Tutorials werden wir den String, der die XML-Aktiendaten enthält, auslesen.

Die, für uns momentan relevanten, XML-Finanzinformationen werden wir dabei in einem StringArray speichern und anschließend auf dem Android Gerät ausgeben.

In dem ersten Abschnitt dieses Tutorials werden wir das XML-Datenformat kurz vorstellen und auf die Besonderheiten der Extensible Markup Language (XML) eingehen.

Anschließend werden wir in Abschnitt zwei das XML-Format der Online-Aktiendaten analysieren und die, für uns relevanten, Finanzinformationen auswählen.

Im dritten Abschnitt erweitern wir dann unsere bisherige Android App um die Fähigkeit XML-Daten auszulesen. Als Datenquelle greifen wir auf die Online-Aktiendaten zurück, die in einem String abgelegt sind. Die ausgelesenen Finanzinformationen speichern wir danach in einem StringArray und geben sie anschließend auf dem Android Smartphone oder Tablet aus.

Nun wünschen wir euch viel Spaß bei dem neunten Teil unseres großen Android Tutorials. Los geht’s!

1. Einführung in XML (Extensible Markup Language)

Die Auszeichnungssprache XML wird zur Darstellung hierarchisch strukturierter Daten verwendet. Die Daten sind in Textform angegeben.

Die Extensible Markup Language (engl. „erweiterbare Auszeichnungssprache“, XML) ist für Menschen und Maschinen gleichermaßen verständlich und wird für den plattform- und implementationsunabhängigen Austausch von Daten zwischen Computersystemen eingesetzt, insbesondere über das Internet.

Eine XML-Datei besteht aus Textzeichen und ist auch von Menschen leicht lesbar. Binärdaten enthält ein XML-Dokument per Definition nicht.

Die Sprache XML wurde entwickelt, um mit ihr Daten beschreiben zu können. Im Gegensatz dazu steht die Sprache HTML, welche entwickelt wurde, um Daten darzustellen.

Beispiel eines XML-Dokuments

Der folgende XML-Code beschreibt das Inventar eines Buchladens:


Die erste Zeile ist die XML Deklaration. Sie definiert die XML-Version, hier Version 1.0.

In der nächsten Zeile wird das Wurzelelement Buchladen des XML-Dokuments beschrieben. Jedes XML-Dokument muss genau ein Wurzelelement (root element) besitzen. Die Elemente eines XML-Dokuments formen eine Baumstruktur. Der Dokumentenbaum beginnt mit der Wurzel, dem Wurzelelement, und führt zu den Blättern, den Kinderelementen (child elements).

Das Wurzelelement liegt in der obersten Ebene. Unterhalb dieser Ebene können beliebig viele weitere Kinderelemente verschachtelt werden. Das Wurzelelement Buchladen besitzt die drei Buch-Kinderelemente. Diese drei Kinderelemente sind Geschwisterelemente.

Jedes dieser drei Geschwisterelemente besitzt das Attribut Kategorie. Der Attribut-Wert wird in Anführungszeichen nach dem = angegeben. Elemente können beliebig viele Attribute besitzen.

Jedes Buch-Kinderelement besitzt vier eigene Kinderelemente Titel, Autor, Jahr und Preis. Zwischen dem Start- und End-Tag eines Elements wird der Elementinhalt als reiner Text angegeben.

Das folgende Diagramm repräsentiert ein Buch aus dem oberen Beispiel XML-Dokument:

Android XML Beispiel

Darstellung eines Buch-Elements aus dem oberen XML-Dokument

In dem oberen Diagramm sind auch die Beziehungen der verschiedenen Elemente untereinander dargestellt. So ist der Buchladen das Vaterelement des Buchs und das Buch selbst ein Kindelement des Buchladens. Der Buchladen ist auch das Wurzelelement des XML-Dokuments.

Das Buch besitzt vier Kindelemente (Titel, Autor, Jahr und Preis) die untereinander Geschwisterelemente sind. Das Buch-Element besitzt das Attribut “Kategorie”, das den Wert Android enthält.

Weitere Informationen und ein sehr schönes Tutorial über XML könnt ihr bei w3schools.com finden: http://www.w3schools.com/xml/default.asp.

2. XML-Format der Online-Finanzdaten

Da wir nun die Grundlagen von XML kennen, können wir einen genaueren Blick auf das XML-Format der Online-Finanzdaten, die wir von unserem Web-Server erhalten, werfen.

Der Server liefert die Online-Aktiendaten im XML-Format. Bisher speichert unsere Android App die empfangenen Daten in einem einfachen String ab.

Der XML-String muss von uns ausgelesen werden (parsen), dazu ist es erforderlich den Aufbau des XML-Formats der Finanzdaten zu kennen.

Mit folgender Anfrage lassen wir von unserem Server simulierte Aktiendaten für die Unternehmen Daimler (DAI.DE) und BMW (BMW.DE) erzeugen:

Die Online-Aktiendaten erhalten wir in folgendem XML-Format zurück:


Als Nächstes werden wir die Struktur der XML-Aktiendaten analysieren. Das Wurzelelement des XML-Dokuments ist query. Es besitzt die beiden Kindelemente (child elements):

  • diagnostics
  • results

Für unsere Android Anwendung ist besonders das Element results interessant. Es enthält alle Informationen über die angefragten Finanzinstrumente, die Daten sind in den Geschwisterelementen mit dem Namen row angegeben. Für jedes angefragte Finanzinstrument (Aktie, Indize, …) ist ein entsprechendes row-Element angelegt worden.

Jedes row-Elemente besitzt die folgenden 13 Kindelemente:

  • symbol
  • name
  • currency
  • exchange
  • price
  • date
  • time
  • change
  • percent
  • open
  • high
  • low
  • volume

Davon sind momentan die Elemente symbol, name, currency, price und percent für unsere AktieHQ App von großer Bedeutung, aber auch die anderen Elemente enthalten nützliche Finanzinformationen für spätere Entwicklungsstufen unsere Anwendung.

In dem folgenden Diagramm ist das XML-Format der gelieferten Online-Finanzdaten dargestellt:

android xml aktiendaten

Darstellung des XML-Formats der simulierten Online-Finanzdaten von unserem Web-Server

Für unsere Android Anwendung ist es wichtig die hierarchische Struktur der XML-Aktiendaten zu kennen. Besonders welche Elemente welche Finanzinformationen enthalten. Im nächsten Abschnitt werden wir den XML-String parsen (auslesen) und die erhaltenen Finanzinformationen auf dem Display ausgeben.

3. Online-Aktiendaten aus dem XML-String auslesen

Um XML-Dokumente in Android zu verarbeiten, sind verschiedene Standards verfügbar. Ein sehr oft verwendeter Standard ist JAXP (Java API for XML Processing). Von JAXP werden drei verschiedene Programmierschnittstellen zur Verfügung gestellt, die XML-Dokumente interpretieren können:

  • DOM (Document Object Model) – Überführung des XML-Dokuments in eine baumartige Objektstruktur
  • SAX (Simple API for XML) – Ereignisorientierte Interpretation des XML-Dokuments
  • StAX (Streaming API for XML) – Ereignisorientierte Interpretation des XML-Dokuments

Wir werden unsere XML-Finanzdaten mit der DOM-Schnittstelle verarbeiten. Der DOM-Standard lädt beim Parsen das XML-Dokument in den Hauptspeicher und stellt es dort in Form eines Objektbaums zur Verfügung.

Die Erstellung eines solchen DOM-Objektbaums aus einem XML-Dokument lässt sich mit wenigen Zeilen Code bewerkstelligen. Daher ist DOM die optimale Methode für das Parsen von XML-Daten für unsere Android Anwendung.

Jedoch besitzt es auch einen großen Nachteil: das komplette XML-Dokument liegt im Arbeitsspeicher. Dies ist bei sehr großen XML-Dateien ein Performance-Problem. In unserem Fall jedoch nicht, da unser XML-Aktiendaten String nur von sehr geringer Größe ist.

3.1 Importieren der benötigten Klassen, Interfaces und Exceptions

Um unsere XML-Aktiendaten auszulesen, werden wir den XML-Parser des Packages javax.xml.parser verwenden. Der XML-Parser zerlegt den XML-Eingabestrom in seine grammatikalischen Bestandteile.

Um ihn nutzen zu können, müssen wir die folgenden zwei Klassen und eine Exception importieren:


Der XML-Parser liest unseren XML-String ein und erzeugt daraus einen Objektbaum. Damit wir den Objektbaum verwenden können, müssen wir noch einige Interfaces des Packages org.w3c.dom importieren. Unter anderem liegt darin das Interface Document, welches den eingelesenen Objektbaum repräsentiert.

Diese folgenden vier Interfaces müssen wir importieren:


Als vorletzten Import laden wir die Klasse InputSource aus dem Package org.xml.sax, der unseren XML-String in eine InputSource einlesen und umwandeln wird. Diese InputSource werden wir dann an den XML-Parser übergeben.

Wir müssen daher die folgende Klasse und Exception importieren:


Als letzten Import laden wir die StringReader-Klasse:

Nachdem wir die notwendigen Importanweisungen in unser Android Projekt in die Klasse AktienlisteFragment eingefügt haben, kommen wir im nächsten Teilabschnitt zu dem eigentlichen Quellcode, durch den die XML-Aktiendaten ausgelesen (geparst) werden.

3.2 Auslesen der Online-Aktiendaten mit Hilfe eines XML-Parsers

Die XML-Aktiendaten lesen wir mit Hilfe der neuen Methode leseXmlAktiendatenAus(String xmlString) aus, der wir den XML-String mit den Online-Aktiendaten übergeben. Die Methode rufen wir am Ende des doInBackground-Tasks auf, dazu später mehr.

Die neue Methode leseXmlAktiendatenAus muss in der inneren Klasse HoleDatenTask der Klasse AktienlisteFragment definiert werden:


Die Methode leseXmlAktiendatenAus untergliedert sich in zwei Teile. Der erste Teil von Zeile 3 bis 21 ist für das Parsen des XML-Strings und Erzeugen des Objektbaums mit den Aktiendaten zuständig.

Der zweite Teil von Zeile 22 bis 48 greift auf den Objektbaum zu und liest aus ihm die Aktiendaten aus. Wir verwenden dafür die Methoden getElementsByTagName und getChildNodes, mit denen wir sehr komfortabel auf die gewünschten XML-Elemente und Werte zugreifen können.

Mit den verschachtelten for-Schleifen lesen wir alle Aktiendaten unserer Aktienliste aus. Die ausgelesenen Werte speichern wir in dem zweidimensionalen Array alleAktienDatenArray ab und bauen damit den String-Array ausgabeArray zusammen.

Am Ende der Methode geben wir die ausgelesenen Finanzinformationen zurück.

3.3 Aufrufen der Methode leseXmlAktiendatenAus

Damit die XML-Aktiendaten ausgelesen werden, müssen wir noch die Methode leseXmlAktiendatenAus, von einer Stelle in unserer Anwendung aus, aufrufen. Der richtige Ort dafür ist kurz vor Ende der doInBackground-Methode unseres asynchronen Tasks.

Wir führen den Methodenaufruf bei der return-Anweisung aus und geben somit den erhaltenen String-Array sofort weiter.


Der obere Code enthält nur die return-Anweisung mit dem Methodenaufruf. Der restliche Programmcode (durch die drei Punkte dargestellt) ist hier nicht angegeben, da er nicht verändert wurde.

Der übergebene aktiendatenXmlString enthält die von unserem Web-Server erhaltenen simulierten Aktiendaten im XML-Format. Die Methode leseXmlAktiendatenAus liest diesen XML-String aus und speichert die relevanten Finanzinformationen in einem String-Array ab. Der String-Array wird dann an die aufrufende Methode zurückgegeben.

3.4 Ausgelesene XML-Aktiendaten in ArrayAdapter einfügen

Die Methode doInBackground gibt den String-Array, der die relevanten Finanzinformationen enthält, mittels return-Anweisung weiter. Dadurch steht der String-Array jetzt als Ergebnis des asynchronen Tasks zur Verfügung und wird der Methode onPostExecute als Parameter automatisch übergeben.

Die Methode onPostExecute bleibt unverändert. Zur Übersicht ist sie hier dennoch aufgeführt:


Die Methode onPostExecute wird am Ende des asynchronen Task automatisch aufgerufen. In ihr füllen wir den ArrayAdapter mit den ausgelesenen Online-Aktiendaten, dessen Inhalt in dem ListView eingefügt und anschließend auf unserem Android Gerät ausgegeben wird.

Da die Klasse AktienlisteFragment unserer Android App an verschiedenen Stellen verändert werden musste, kann es leicht zu Fehlern und Missverständnissen kommen. Um dies auszuschließen, solltet ihr euren Code zur Kontrolle mit der gesamten Klassendatei AktienlisteFragment.java vergleichen.

AktienlisteFragment.java (als ZIP-Datei gepackt)

4. Testen unserer Android App und Anzeigen der aktuellen Online-Aktiendaten

Dies ist ein großer Moment in der Entwicklung unserer AktieHQ App. Wir lassen das erste Mal simulierte Online-Aktiendaten auf unserem Android Smartphone oder Tablet anzeigen. Damit ist unsere Android App erstmals sinnvoll nutzbar und versorgt uns mit dem aktuellen Finanzdaten.

Damit wir unsere App auf dem Smartphone oder Tablet starten können, müssen alle Schritte von Teil 3 des Android Tutorials befolgt worden sein.

Zuerst schließen wir unser Android Gerät an den PC an und stellen eine Verbindung über die ADB (Android Debug Bridge) her. Danach klicken wir auf das Run 'app'-Symbol. Unser Android Projekt wird dadurch neu erstellt und auf dem angeschlossenen Gerät ausgeführt.

Das Run 'app'-Symbol befindet sich in der oberen Menüleiste, siehe folgende Abbildung:

android studio project avd run

Android App über das Run App-Symbol starten

Nach einigen Momenten öffnet sich der Select Deployment Target-Dialog. In ihm nehmen wir die folgenden Einstellungen vor:

  1. Das angeschlossene Android Gerät unter Connected Devices auswählen.
  2. Mit einem Klick auf den OK-Button die Installation unserer App auf das Gerät starten.
android device run app

Auswählen des angeschlossenen Android Geräts zum Aufspielen unserer App

Der Dialog schließt sich und unsere Android App wird auf das angeschlossene Gerät übertragen und installiert. Die Installation dauert nur einen kurzen Augenblick und verläuft fast unbemerkt im Hintergrund. Danach wird unsere App automatisch gestartet.

4.1 Aktuelle Aktiendaten mit unserer App abfragen und anzeigen

Zu Beginn sehen wir die alten Beipiel-Aktiendaten (mock data) in unserem ListView. Um die simulierten Online-Finanzdaten bei unserem Web-Server abzufragen, müssen wir auf den Aktualisieren-Button im Overflow Menu klicken.

Die folgende Abbildung zeigt, wie unsere Android App die Aktiendaten über das Internet abfragt:

app android xml

Mit einem Klick auf Aktualisieren werden echte Online-Aktiendaten aus dem Internet geladen

Die Online-Aktiendaten werden als Strings in dem ListView angezeigt. Wir geben für jeden Eintrag das ausgelesene Symbol, den Kurswert mit Währung, die Änderung zum Vortag in Prozent sowie den Namen des Finanzinstruments aus. Für den Moment sind diese Angaben völlig ausreichend.

Möchten wir weitere Finanzinformationen ausgeben, müssen wir diese aus dem XML-String auslesen und gesondert auf dem Android Gerät darstellen. Hierfür empfiehlt sich die Verwendung von Grafiken, wodurch die Darstellung aufgelockert wird und unsere Android Anwendung benutzerfreundlicher ist.

Was auf dem oberen Bild nicht zu sehen ist, sind die beiden anderen Kurzmitteilungen (Toasts), die über den aktuellen Status der Aktiendatenanfrage informieren. Im Bild ist nur der letzte Toast dargestellt: “Aktiendaten vollständig geladen!”.

4.2 Video – Laden von Online-Aktiendaten mit unserer Android App

Nun möchten wir unserer Anwendung auch einmal beim Holen der Online-Aktiendaten über die Schulter schauen. Dazu haben wir das folgende kurze Video erstellt, in dem die Funktion unserer App vorgestellt wird:

Zuerst sieht man die App im Startzustand. Mit einem Klick auf den Aktualisieren-Button wird der asynchrone Task HoleDatenTask im Hintergrund gestartet.

Der asynchrone Task fragt zuerst die Online-Aktiendaten bei unserem Web-Server im XML-Format ab und liest die empfangenen XML-Daten anschließend aus. Dabei werden die relevanten Finanzinformationen (Symbol, Preis, Währung, Änderung in Prozent und Name) in den ListView eingefügt und auf dem Android Gerät angezeigt.

Danach wird der asynchrone Task beendet und unsere Android App hat die Abfrage der Online-Aktiendaten für die Finanzinstrumente BMW.DE, DAI.DE und ^GDAXI beendet.

Zusammenfassung

In diesem Teil des großen Android Tutorials haben wir das Auslesen von XML-Daten kennengelernt. Die Sprache XML (Extensible Markup Language) wurde zu Beginn kurz vorgestellt und dabei auf ihre hierarchische Struktur eingegangen.

Anschließend haben wir das Format der simulierten XML-Aktiendaten analysiert und die relevanten Finanzinformationen für unsere Android App festgelegt.

Danach erweiterten wir unsere Anwendung um eine XML-Auslese-Funktion. Mit der neu definierten Methode leseXmlAktiendatenAus ist unsere App in der Lage XML-Strings auszulesen und auf bestimmte Elemente zuzugreifen. Momentan lesen wir nur fünf Parameter aus den Online-Aktiendaten aus. Es bestehen also noch viele Möglichkeiten unsere App weiter zu verbessern und nützlicher zu machen.

Abschließend haben wir die AktieHQ App auf dem Android Gerät installiert und ausgeführt. Das Video weiter oben zeigt den aktuellen Entwicklungsstand unserer Anwendung.


Comments 19

  1. Pingback: Android Tutorial: Daten von einer Webseite abfragen in Android

  2. Pingback: Android Tutorial: Activities und Intents in Android

  3. Hallo,

    ich habe mich bis zu diesem Abschnitt vorgearbeitet. Dass mir das gelungen ist, verdanke ich der ausgezeichneten Darstellung dieses Lehrstoffes, für den ich mich herzlich bedanke.

    Jetzt habe ich aber ein Problem, für das ich selbst keine Lösung finde.

    In der Methode leseXmlAktiendatenAus() wird für den Aufruf von Log.e als erster Parameter LOG_TAG übergeben. Wo und wie ist LOG_TAG definiert?

    Danke für eine Antwort,
    Konrad

    PS: Habe es in der Methode onCreateView() gefunden. Jetzt muss ich nur noch dahinter kommen, warum es dann in leseXmlAktiendatenAus() nicht gefunden wird.

    1. Post
      Author

      Hallo Konrad,

      vielen Dank für Dein Lob!

      Die Konstante LOG_TAG wird in der inneren Klasse HoleDatenTask der Klasse AktienlisteFragment definiert. Der gesamt Quellcode der Klasse AktienlisteFragment ist leider nicht in Teil 9 angegeben, sondern nur auf die Klassendatei verlinkt worden.

      Am besten Du speicherst die Klassendatei AktienlisteFragment.java auf Deinem Rechner ab und analysiert den Quellcode. Darin wird in Zeile 129 der LOG_TAG definiert.

      Viele Grüße, Chris

      1. Danke Chris,

        danke für Deine Information. Jetzt ist alles klar. Bei der Übernahme des Codes für die innere Klasse HoleDatenTask (hier Abschnitt 3.2) mussten ja einige Zeilen ab der 2. Zeile in dieser Klasse überschrieben werden. Ich habe aber ab der ersten Zeile überschrieben und das ist die mit der Definition für LOG_TAG.

        Diese Definition ist aber auch in der Methode CreateView() (Zeile 88) vertreten. Von dort habe ich sie mir in die Klasse HoleDatenTask geholt.

        Es grüßt Dich aus Landsberg, Konrad

        1. Post
          Author
  4. Hallo Chris,
    nachdem ich vor einiger Zeit hier mal das Projekt Aktiendaten nachgebaut habe und das auch sehr gut funktioniert hat, habe ich mir gedacht, es sollte für mich auch möglich sein eine eigene App zu bauen, die Wetterdaten, die auf meinem Webspace liegen, auslesen zu können und in einer eigenen App darzustellen.
    Ich komme jetzt soweit, daß ich die Daten in meine App hochladen kann, dann wird meine App allerdings angehalten.
    Im Log ist eine FATAL EXCEPTION nachzulesen
    02-21 15:47:09.760: E/AndroidRuntime(26009): FATAL EXCEPTION: AsyncTask #1
    und noch etliche andere Meldungen hinterher.
    Wie kann ich jetzt bei der Fehlersuche vorgehen?
    Kannst du etwas empfehlen?

    Grüße
    Mathias

    1. Post
      Author

      Hallo Mathias,

      meist wird der Fehler ziemlich exakt in dem Error-Log angegeben.

      Wenn Du möchtest, kannst Du mir den gesamten Error-Log per E-Mail zuschicken und ich schau ihn mir mal genauer an. Die E-Mail Adresse steht im Impressum.

      Viele Grüße, Chris

  5. Zunächst einmal, klasse Tutorial! Das beste, dass ich zum Einstieg in Android finden konnte.

    Eine Sache ist mir jedoch unklar. Wieso wird nach der Methode onPostExecute die Liste automatisch aktuallisiert? Wir haben zwar mit “mAktienlisteAdapter.add(aktienString);” die Strings zum Adapter hinzugefügt, aber das aktualisiert die sichtbare Liste doch nicht automatisch, oder?

    1. Post
      Author
  6. Hey Chris
    fällt dir zu diesem Fehler etwas ein?
    04-05 11:04:18.801 2035-2063/ch.test.aktiehq.app E/Surface: getSlotFromBufferLocked: unknown buffer: 0xab3d1220
    04-05 11:04:20.300 2035-2063/ch.test.aktiehq.app E/Surface: getSlotFromBufferLocked: unknown buffer: 0xab3d24f0

    er erscheint im terminal, sobald ich auf Aktualisieren drücke.
    das “Aktiendaten werden abgefragt” Toast kommt aber noch..

    Merci für deine Hilfe
    Liebe Grüsse

    Claudia

  7. Bei mir führt Zeile 37 zu einem Fehler:
    java.lang.NullPointerException: Attempt to invoke interface method ‘java.lang.String org.w3c.dom.Node.getNodeValue()’ on a null object reference

    37 aktienParameterWert = aktienParameter.getFirstChild().getNodeValue();

    Das Element hat ja kein Child, also liefert .getFirstChild() null, daher der Fehler oder?

    1. Post
      Author

      Hallo Tom,

      wenn der Rückgabewert (Objekt) von getFirstChild() leer ist, also ein null object, dann führt dies zu deiner angegebenen Fehlermeldung. Dies sollte aber normalerweise nicht passieren. Der Inhalt der Variable aktienParameterWert scheint nicht die korrekten Daten zu enthalten.

      Viele Grüße, Chris

  8. Hallo Chris,

    kann ich stattdessen .getTextContent() verwenden?

    So bekomme ich keinen Fehler:
    aktienParameterWert = aktienParameter.getTextContent();

    Vielen Dank für dein Tutorial!

    1. Post
      Author
  9. Hi Chris,

    auch von meiner Seite erst einmal großes Dankeschön für die Tutorials.

    Bis jetzt kam ich eigentlich gut durch, alles hat funktioniert. Anfänglich auch mit diesem Tutorial (Aktiendatenliste anzeigen, aktualisieren drücken, nur noch 3 Einträge mit mehr Details). Als ich heute weiter machen wollte, hat bei Start der App und aktualisieren das Anzeigen der 3 Einträge geklappt. Als ich die App schloss und wieder aktualisierte, änderte sich außer “Aktiendaten werden abgefragt!” und “Aktiendaten vollständig geladen!” nichts mehr. Also die 9 Einträge vom “Startbildschirm” blieben die gleichen (mit z. B. “Adidas – Kurs: 73,45 €”).

    Daraufhin habe ich einmal die App vom Tablet gelöscht und wieder neu draufgespielt, nochmals den gesamten Quellcode von “AktienlisteFragment.java” neu eingefügt und kompiliert, aber ohne Erfolg. Ins Internet (via chrome-Button) komme ich auch…

    Irgendeine Idee, was das sein könnte oder wie ich dieses Problem analysieren könnte?

    Schaue ich währen der Bedienung ins “Run”-Protokoll rein, wird mir folgender Fehler angezeigt:

    E/HoleDatenTask: Error
    java.io.FileNotFoundException: https://query.yahooapis.com/v1/public/yql?
    q=select%20*%20from%20csv%20where%20url=’http://download.finance.yahoo.com/d/quotes.csv?
    s=BMW.DE,DAI.DE,%255EGDAXI%26f=snc4xl1d1t1c1p2ohgv%26e=.csv’%20and%20columns=
    ‘symbol,name,currency,exchange,price,date,time,change,percent,open,high,low,volume’&diagnostics=true
    at com.android.okhttp.internal.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:186)
    at com.android.okhttp.internal.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:246)
    at de.programmierenlernenhq.aktiehq.app.AktienlisteFragment$HoleDatenTask.doInBackground(AktienlisteFragment.java:243)
    at de.programmierenlernenhq.aktiehq.app.AktienlisteFragment$HoleDatenTask.doInBackground(AktienlisteFragment.java:136)
    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:848)

    Schon mal vielen Dank für deine Zeit
    Adventliche Grüße
    Sebastian

    1. Problem möglicherweise erledigt. Frei nach dem Windows-Prinzip zur Problembehandlung: Aus-An-Geht…
      Dennoch zur Problemanalyse, wie kann ich dieses denn untersuchen? Anhand der Log-Daten? Wenn ja, worauf muss ich achten und nach was googlen?

      Nochmals Gruß

      1. Post
        Author

        Hallo Sebastian,

        gut wenn es jetzt wieder bei dir funktioniert.

        Die Fehlerursache findet man mit Hilfe des Debuggers von Android Studio. Man setzt einen Breakpoint an die Zeile im Quellcode, die als letzte vor dem Absturz fehlerfrei ausgeführt wurde und geht dann Step-by-Step vor. Solange bis man den Fehler lokalisiert hat. Im Debugger kann man dabei genau nachverfolgen, welchen Wert welche Variable besitzt und so feststellen was schief läuft. Falls du Debugging noch nicht so gut kennst, kannst du ja mal danach googeln. Es gibt bestimmt einige hilfreiche Videos bzgl. Debugging in Android Studio.

        Viele Grüße, Chris

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.