The new Android platforms use a class called HttpUrlConnection to work with external service calls,
This post is on a method which can send a JSON as body and receive a JSON as response you can use this method whenever you need to post a JSON to a rest location and get a json from a rest location.
This method will send the JSON string as the body of the request.
You'll have to pass the following
URL : the request url
JSON : the json to be sent can be NULL on get scenarios
Timeout : Connection timeout
Method : Http method POST / GET / PUT etc
public static String getJSON(String url, String json, int timeout, String method) { HttpURLConnection connection = null; try { URL u = new URL(url); connection = (HttpURLConnection) u.openConnection(); connection.setRequestMethod(method); //set the sending type and receiving type to json connection.setRequestProperty("Content-Type", "application/json"); connection.setRequestProperty("Accept", "application/json"); connection.setAllowUserInteraction(false); connection.setConnectTimeout(timeout); connection.setReadTimeout(timeout); if (json != null) { //set the content length of the body connection.setRequestProperty("Content-length", json.getBytes().length + ""); connection.setDoInput(true); connection.setDoOutput(true); connection.setUseCaches(false); //send the json as body of the request OutputStream outputStream = connection.getOutputStream(); outputStream.write(json.getBytes("UTF-8")); outputStream.close(); } //Connect to the server connection.connect(); int status = connection.getResponseCode(); Log.i("HTTP Client", "HTTP status code : " + status); switch (status) { case 200: case 201: BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream())); StringBuilder sb = new StringBuilder(); String line; while ((line = bufferedReader.readLine()) != null) { sb.append(line + "\n"); } bufferedReader.close(); Log.i("HTTP Client", "Received String : " + sb.toString()); //return received string return sb.toString(); } } catch (MalformedURLException ex) { Log.e("HTTP Client", "Error in http connection" + ex.toString()); } catch (IOException ex) { Log.e("HTTP Client", "Error in http connection" + ex.toString()); } catch (Exception ex) { Log.e("HTTP Client", "Error in http connection" + ex.toString()); } finally { if (connection != null) { try { connection.disconnect(); } catch (Exception ex) { Log.e("HTTP Client", "Error in http connection" + ex.toString()); } } } return null; }
Happy Coding
-Guru-
Hi Guru,
ReplyDeleteIt is working like a charm.
Thank you for sharing code.
looks like a bug that utf-8 is not used when estimating bytes but when sending
ReplyDeleteconnection.setRequestProperty("Content-length", json.getBytes().length + "");
outputStream.write(json.getBytes("UTF-8"));
God bless you son, a simple, to the point, no frills code that runs. Seriously, you're a life saver, well done!
ReplyDeleteDitto Tiago Seiler's comment. Thank you for this solution!
ReplyDeleteThank you very much !
ReplyDelete