2017-01-13 5 views
-1

In meinem Android-Projekt habe ich eine Klasse für die HTTP-Anforderungen an meinen Server. Dort habe ich Methoden für sendGet, sendPost und sendPut. Hier ist der Code für die Methode sendPost:Android - Ausnahmen beim Senden von Post-Anfrage an den Server

public JSONObject sendPost(String urlString, String urlParameters) { 

     URL url; 
     JSONObject jObj = null; 
     String json = ""; 

     try{ 

      url = new URL(urlString); 
      HttpURLConnection connection = (HttpURLConnection)url.openConnection(); 

      connection.setRequestMethod("POST"); 
      connection.setRequestProperty("Content-Type", "application/json"); 

      connection.setDoOutput(true); 

      DataOutputStream wr = new DataOutputStream(connection.getOutputStream()); 
      wr.writeBytes(urlParameters); 
      wr.flush(); 
      wr.close(); 

      BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream())); 
      String line; 
      StringBuilder sb = new StringBuilder(); 

      while ((line = br.readLine()) != null) { 
       sb.append(line+"\n"); 
      } 
      br.close(); 

      json = sb.toString(); 

     } catch (MalformedURLException e){ 
      e.printStackTrace(); 
     } 
     catch (IOException e){ 
      e.printStackTrace(); 
     } 

     try{ 
      jObj = new JSONObject(json); 
     } 
     catch (JSONException e){ 
      e.printStackTrace(); 
     } 

     System.out.println(jObj); 

     return jObj; 

    } 

Es sollte die Serverantwort als JSONObject zurückgeben. Wenn ich einen Beitrag zu meinem Server senden, erhalte ich die folgenden Ausnahmen:

java.io.FileNotFoundException: http://... (In der Zeile, wo ich die BufferedReader erstellen)

org.json.JSONException: End of input at character 0 of (In der Zeile, wo ich jObj = new JSONObject tun (json);)

Aber wenn ich die URL in meinen Browser kopieren, gibt es keine Probleme damit. Und es scheint, als ob alles funktioniert, weil mein Server die Anfrage erhalten und bearbeitet hat. Aber warum bekomme ich diese Fehler und ein leeres JSONObject als Ergebnis?

EDIT:

Auf meinem node.js Server ich Antworten in folgendem Format senden:

res.status(200).json({ success: "true" });

oder

res.status(400).json({ success: "false", message:"..." });

EDIT 2:

Nach @greenapps Kommentar ich meinen Code ein wenig verändert:

... 
    json = sb.toString(); 
    jObj = new JSONObject(json); 

    br.close(); 
    wr.flush(); 
    wr.close(); 

} catch (MalformedURLException e){ 
    e.printStackTrace(); 
} 
catch (IOException e){ 
    e.printStackTrace(); 
} 
catch (JSONException e){ 
    e.printStackTrace(); 
} 

return jObj; 

Nun ist die JSONException ist weg, aber die FileNotFoundException ist immer noch da und die jObj ist noch leer, wenn es zurückgegeben wurde.

+0

'wr.close();' Schließen Sie nicht den Strom, da es die Verbindung auch beenden könnte. – greenapps

Antwort

0

Ich hatte einen Fehler in meinem node.js Server und der Antwortcode des Servers war 502. Und der BufferedReader funktioniert nur mit einem 200 Statuscode. Deshalb habe ich die Ausnahmen bekommen. Jetzt habe ich eine wenn um den BufferedReader:

Verwandte Themen