url.openStream() unzuverlässig

  • Antworten:3
Schinkelmedia
  • Forum-Beiträge: 6

04.08.2011, 14:15:38 via Website

Ich bekomme eine "java.io.FileNotFoundException: https://api......".

Nicht immer, aber sehr oft, die URL existiert 100%ig und der Server antwortet auch.
Vielleicht nimmt es sich nicht genug Zeit für die Anfrage oder sowas...
Hat jemand damit Erfahrung?

1public void startparsing(URL url) {
2
3 try {
4 SAXParserFactory spf = SAXParserFactory.newInstance();
5 SAXParser sp = spf.newSAXParser();
6 XMLReader xr = sp.getXMLReader();
7 Xmlhandler myExampleHandler = new Xmlhandler();
8 xr.setContentHandler(myExampleHandler);
9 xr.parse(new InputSource(url.openStream()));
10 Singleton.getInstance().sendToast("Erfolgreich geupdated");
11 } catch (Exception e) {
12 Singleton.getInstance().sendToast("Fehler");
13 Log.e(MY_DEBUG_TAG, "Error: " + e.getMessage());
14 Log.e(MY_DEBUG_TAG, "Error", e);
15 }
16 }

— geändert am 04.08.2011, 17:29:40

Antworten
Schinkelmedia
  • Forum-Beiträge: 6

04.08.2011, 17:31:34 via Website

habe jetzt:

1xr.parse(new InputSource(url.openStream()));

durch

1URLConnection conn = url.openConnection();
2 conn.setConnectTimeout(timeoutMs);
3 conn.setReadTimeout(timeoutMs);
4 xr.parse(new InputSource(conn.getInputStream()));

ersetzt.
Dadurhc kann ich einen Timeout angeben. Der macht es allerdings nicht zuverlässiger.

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

05.08.2011, 09:20:27 via Website

FileNotFound deutet ja auf einen 404 als response code hin. Timeout würde IMHO zu einer anderen Exception führen.
Du kannst dir doch auch den Response-Code nach dem connect holen mein ich.

Probier doch mal im Browser rum, ob du das auch hinbekommst.
Kann doch sein, dass der Server ab und zu mal Schluckauf hat.
Dann würde ich vielleicht eine Logik einbauen, die es bis zu 3 mal versucht (evtl. noch mit zufälligem Back-off) und erst dann aufgibt.

Achso: Generell würde ich für sowas unter Android die Klassen der httpclient Bibliothek benutzen.
Die sind schon integriert und bieten viel mehr Komfort.

— geändert am 05.08.2011, 09:24:07

Antworten
Markus B.
  • Forum-Beiträge: 636

05.08.2011, 12:39:58 via Website

Hi,
das liegt sicher nicht an java.net.URLConnection ...
Es ist ehr ein Zusammenspiel von deinem Server, deiner App und der Device Verbindung (Wifi/Umts).
Wenn du mehr konfigurieren will nutzt einfach den org.apache.http.client.HttpClient.

Gruß,
Markus

Antworten