HttpRequest liefert plötzlich keinen String mehr

  • Antworten:7
Sebastian
  • Forum-Beiträge: 15

27.06.2014, 12:16:37 via Website

Hallo,

ich habe mal wieder ein (warscheinlich kleines) Problem... Ich möchte lediglich einen JSON-String von einem Server herunterladen... Hier ist mein Code:

private String processHttpRequest(String url){
    HttpClient httpclient = new DefaultHttpClient();
    HttpResponse response;
    String responseString = null;
    Log.d("NAV", "URL: "+url);
    try{
        response = httpclient.execute(new HttpGet(url));
        StatusLine statusLine = response.getStatusLine();

        if(statusLine.getStatusCode() == HttpStatus.SC_OK){

            ByteArrayOutputStream out = new ByteArrayOutputStream();
            response.getEntity().writeTo(out);
            out.close();
            responseString = out.toString();
        } else {
            response.getEntity().getContent().close();
            throw new IOException(statusLine.getReasonPhrase());
        }
    } catch (Exception e) {
    }
    Log.d("NAV", "string: "+responseString);
    return responseString;      
}

Ich habe den Code eins zu eins aus meiner anderen App übernommen, bei der das problemlos geklappt hat! Warum funktioniert das auf einmal nicht mehr? Habe ich etwas übersehen?

Die URL wird problemlos übergeben. Der responseString ist dann aber null. Es muss wohl ein Problem mit

response = httpclient.execute(new HttpGet(url));

geben... Kann mir jemand helfen?

Vielen Dank!

Antworten
Sebastian
  • Forum-Beiträge: 15

27.06.2014, 13:15:02 via Website

Was könnte ich mit der Exception anfangen? Kann ich über diese mehr über den Fehler ausgeben lassen?

— geändert am 27.06.2014, 13:18:11

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

27.06.2014, 13:28:29 via Website

ich mache das Immer so:

     HttpClient httpclient = new DefaultHttpClient(); // Erstelle HTTP Client  
    HttpPost httppost = new HttpPost(url);  // Erstelle HTTP Post


    try {    



    HttpResponse response = httpclient.execute(httppost); 
    final String responseBody = EntityUtils.toString(response.getEntity(), HTTP.UTF_8);

}

Statt dem HTTP Post objekt kannst du aabe auch httpGet nehmen.
Aber pass auf, dass du keine NetworkOnMainException hast --Y Also immer in externem Thread oder AsyncTask ausführen

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

Antworten
Sebastian
  • Forum-Beiträge: 15

27.06.2014, 14:05:57 via Website

Danke, ich werde das gleich mal versuchen! Ne, eine NetworkOnMainException gibts nicht, ich habe das alles in den AsyncTask gepackt :-)

Antworten
Sebastian
  • Forum-Beiträge: 15

27.06.2014, 14:14:31 via Website

Stürzt leider genauso ab... Außer ich setzte den ursprünglichen responseString nicht auf null sondern auf " ". Aber so oder so, wird der String nicht vom Server geladen. Ich weiß echt nicht warum! Es kann doch nicht sein, dass genau diese Funktion in der einen App funktioniert und in der anderen plötzlich nicht mehr! :?

Ich bin echt grad mal wieder am Verzweifeln....

Viele Grüße!

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

27.06.2014, 14:17:27 via Website

Nimm den Debugger und prüfe die einzelnen Variablen, ob diese gesetzt sind oder nicht.
Und werte noch die Try aus, habe vergessen den Catch Block zu posten.
Hast du die Internet Permissiongesetzt?

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

Antworten
Sebastian
  • Forum-Beiträge: 15

27.06.2014, 14:27:00 via Website

Ich bin vorhin schonmal mit dem Debugger durchgegangen, aber das ist ziemlich komplex was in meinem Fall in "response = httpclient.execute(new HttpGet(url));" passiert... Was ich rausfinden konnte: Das HttpGet-Objekt wird auf jedenfall zurückgegeben. Aber bei execute null... Aber das ist ja offensichtlich....

Ich habe das Projekt mal meinem Dozenten geschickt, der schaut mal drüber. Ich bin gespannt! :)

— geändert am 27.06.2014, 14:43:32

Antworten
Sebastian
  • Forum-Beiträge: 15

27.06.2014, 16:32:04 via Website

Also es lag wohl nicht an der Methode an sich, sondern an der Verwendung des Async Tasks... Vielen Dank trotzdem für deine Hilfe :-)

Antworten