Code snippet: json object as http-put request

This is a pretty short function to send a json-object as a http-put request to a given url. I was looking for something like that for a while but most solutions I found are working with streams, so you also have to handle them. This one is pretty straight forward though ;)

public static boolean putJSON(String url, JSONObject json) {
	HttpClient httpClient = new DefaultHttpClient();
	HttpPut putMethod = new HttpPut(url);
	HttpEntity data;
	
	try {
		data = new StringEntity(json.toString());
		putMethod.setEntity(data);
		httpClient.execute(putMethod);
	} catch (Exception e) {
		if(DEBUG)
			Log.e(LOGGER, "Exception while sending data: " + e.getMessage());
		return false;
	} finally {
		putMethod.abort();
	}
	return true;
}

4 comments

  • Deine Android-Abteilung wird ja immer größer oO

    Naja, je nachdem wieviel geschickt wird, würde aber schon ein Stream Sinn machen, oder? Dann könnte man das JSON-Objekt erstmal durch nen zip-Algorithmus schicken und dann erst senden:
    http://devstream.stefanklumpp.com/2009/11/android-simple-httpclient-to.html

    However:
    Android > iPhone ;)

  • Also das was er schickt packt er nirgends, sondern sagt nur, dass er ein JSON-Objekt schickt, als Antwort erwartet und eine Antwort wohl auch gezippt annehmen würde:
    httpPostRequest.setHeader("Accept", "application/json");
    httpPostRequest.setHeader("Content-type", "application/json");
    httpPostRequest.setHeader("Accept-Encoding", "gzip");

    Ansonsten haut er den Spaß ja anschließend direkt raus, ohne irgendwas anders zu machen als ich:
    HttpResponse response = (HttpResponse) httpclient.execute(httpPostRequest);
    Wäre allerdings interessant, wenn der Java-Netzwerkstack den Spaß selbstständig packen würde, falls man sagt, dass man Gepacktes akzeptiert. Allerdings glaube ich das nicht. Ansonsten ist es aber eh total unabhängig von Stream oder nicht-Stream ;)

  • “Wäre allerdings interessant, wenn der Java-Netzwerkstack den Spaß selbstständig packen würde, falls man sagt, dass man Gepacktes akzeptiert. Allerdings glaube ich das nicht.”

    Kann ich mir auch nicht vorstellen, ist aber jetzt auch nicht soooo wild, die 3 Zeilen noch selbst zu schreiben:

    OutputStream out = new GZIPOutputStream(new FileOutputStream(filename+".gz"));
    byte[] buffer = new byte[8192];
    for (int length; (length = in.read(buffer)) != –1;)
    out.write(buffer, 0, length);

    “Allerdings glaube ich das nicht. Ansonsten ist es aber eh total unabhängig von Stream oder nicht-Stream”

    Hm, ich würde eher sagen, dass es auf das vereinbarte Protokoll zwischen Client und Server ankommt. Ich glaube, dass dein Server meckert, wenn ein Client ihm was gzip-tes (juhu, denglish 4ever!) schickt, er aber plain text erwartet. ;)

    Davon abgesehen ist die Antwort eh 5!

  • Was das Zippen angeht ist das richtig. Da würde er motzen :mrgreen:

    Allerdings motzt er nicht, wenn ich einen Socket + Outstream bei mir aufmache und dann den Spaß da rein kippe. Das merkt er nämlich gar nicht :P (Ist aber deutlich mehr Aufwand zu coden, siehe altes Gamepad ^^)

    Aber das mit der 5 nehme ich dir nicht ab! Ich bin für 42 und, dass der (g)Zip mal wieder eine Sonde verloren hat ;)

Leave a Reply