Fehler beim Parsing von Json (http) abfangen

  • Antworten:3
  • Bentwortet
HansPeter
  • Forum-Beiträge: 9

28.05.2015, 10:33:26 via Website

Hallo zusammen,

ich möchte gerne Daten von einer Internetseite per json abholen und stehe nun vor dem Problem div. Fehler abzufangen.
Der Datenabruf funktioniert soweit. Aber ich frage mich, was zu tun ist, wenn zum Beispiel das Handy keinen Internetzugang hat oder der Webserver offline ist.

   try {

        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(url);
        HttpResponse httpResponse = httpClient.execute(httpPost);
        int status = httpResponse.getStatusLine().getStatusCode();

        if (status == 200) {
            HttpEntity httpEntity = httpResponse.getEntity();
            is = httpEntity.getContent();
        }

    } catch (Exception e) {
        Log.e("Http", "exception", e);
    }

Hier hole ich zum Beispiel Daten in einer extra Klasse ab. Wie muss ich vorgehen, um zum Beispiel einen Fehlerhinweis auf die View zu werfen?
(Zum Beispiel einen Hinweis, das keine Daten geliefert wurden)

— geändert am 28.05.2015, 10:34:22

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

28.05.2015, 21:11:32 via Website

Das kommt darauf an, wie deine Struktur aufgebaut ist. Normalerweise holt man Daten in einem anderen Thread bzw. AsyncTask. Diesem implementierst du dann ein Callback (oder mehere). eines für einen Erfolg und dann als String die Daten in den MainThread übergenben, im zweiten ist dann die Fehlerbehandlung bei welcher du z.b eine Exception übergeben kannst.

Bsp.:

public void onFinish(String result) {

            // Laden abgeschlossen result inst ein JSON String
        }

        @Override
        public void onFailture(Exception ex) {
            // Es gab irgend einen Fehler, der behandeld erden muss/kann

        }
    });

Hier noch ein Tutorial zum Asynchronen Laden von Webseiten:
https://www.nextpit.de/forum/568854/tutorial-download-einer-webseite

Du kannst das ganze aber auch schon voher prüfen, zumindest ob das Handy Intenet (mobil oder welan) hat, bekommst du schon ohne HTTP Anfrage heraus:
http://stackoverflow.com/a/4009133

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

Antworten
HansPeter
  • Forum-Beiträge: 9

29.05.2015, 10:43:24 via Website

Danke für die Antwort. Ich verwende einen async zum holen der Daten. Jetzt muss ich erstmal schauen wie das mit den callbacks funktioniert.
Das ist alles nicht so einfach.
Ich habe den Datenabruf in einer eigenen Klasse. Zum Beispiel werden in der "doBackground"-Methode die Json Daten so abgeholt:

String jsonStr = new FetchUrl().getObject(url);

Da bin ich überfordert, wie ich hier noch einen zweiten Wert (z.B. für einen Fehler beim Datenabruf) "rausbekomme".

Gruß
HansPeter

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

29.05.2015, 10:53:57 via App

Du hast ja einen try block und den dazugehörigen catch. Wenn du in den catch kommst weisst du es ist ein Fehler. Dann gibt es noch mehere z.b wenn http status != 200 oder wenn die Respone leer oder null ist. Dann wirfst du einen Fehler und rufst statt dem success Callback den Fehler callback auf.

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

HansPeter

Antworten