Android HttpClient, DefaultHttpClient, HttpPost

How can I send string data ( JSONObject.toString() ) to url. I want to write a static method in the util class for this. I want the method signature to look like this

public static String postData (String url, String postData) throws SomeCustomException

What should be the format of the url string

The returned string is a response from the server in the form of a string representation of json data.

EDIT

Current connection in use

 package my.package; import my.package.exceptions.CustomException; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URLDecoder; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.DefaultHttpClient; public class ConnectionUtil { public static String postData(String url, String postData) throws CustomException { // Create a new HttpClient and Post Header InputStream is = null; StringBuilder sb = null; String result = ""; HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost(); httppost.setHeader("host", url); Log.v("ConnectionUtil", "Opening POST connection to URI = " + httppost.getURI() + " url = " + URLDecoder.decode(url)); try { httppost.setEntity(new StringEntity(postData)); // Execute HTTP Post Request HttpResponse response = httpclient.execute(httppost); HttpEntity entity = response.getEntity(); is = entity.getContent(); } catch (Exception e) { Log.e("log_tag", "Error in http connection " + e.toString()); e.printStackTrace(); throw new CustomException("Could not establish network connection"); } try { BufferedReader reader = new BufferedReader(new InputStreamReader( is, "utf-8"), 8); sb = new StringBuilder(); sb.append(reader.readLine() + "\n"); String line = "0"; while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } is.close(); result = sb.toString(); } catch (Exception e) { Log.e("log_tag", "Error converting result " + e.toString()); throw new CustomException("Error parsing the response"); } Log.v("ConnectionUtil", "Sent: "+postData); Log.v("ConnectionUtil", "Got result "+result); return result; } } 

Logcat Output

10-16 11: 27: 27.287: E / log_tag (4935): error in the java.lang.NullPointerException http connection 10-16 11: 27: 27.287: W / System.err (4935): java.lang.NullPointerException 10 -16 11: 27: 27.287: W / System.err (4935): at org.apache.http.impl.client.AbstractHttpClient.determineTarget (AbstractHttpClient.java:496) 10-16 11: 27: 27.307: W / System .err (4935): at org.apache.http.impl.client.AbstractHttpClient.execute (AbstractHttpClient.java:487) 10-16 11: 27: 27.327: W / System.err (4935): at org.apache. http.impl.client.AbstractHttpClient.execute (AbstractHttpClient.java-00-0065) 10-16 11: 27: 27.327: W / System.err (4935): at in.gharpay.zap.integration.ConnectionUtil.postData (ConnectionUtil.java : 92) 10-16 11: 27: 27.327: W / System.err (4935): at.gharpay.zap.integration.ZapTransaction $ 1.doInBackground (ZapTransaction.java:54) 10-16 11: 27: 27.327: W /System.err(4935): at.gharpay.zap.integration.ZapTransaction $ 1.doInBackground (ZapTransaction.java:1) 10-16 11: 27: 27.327: W / System.err (4935): at and roid.os.AsyncTask $ 2.call (AsyncTask.java:185) 10-16 11: 27: 27.327: W / System.err (4935): with java.util.concurrent.FutureTask $ Sync.innerRun (FutureTask.java: 306) 10-16 11: 27: 27.327: W / System.err (4935): with java.util.concurrent.FutureTask.run (FutureTask.java:138) 10-16 11: 27: 27.327: W / System. err (4935): when java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1088) 10-16 11: 27: 27.327: W / System.err (4935): when java.util.concurrent.ThreadPoolExecutor $ Worker .run (ThreadPoolExecutor.java//81) 10-16 11: 27: 27.327: W / System.err (4935): on java.lang.Thread.run (Thread.java:1019) 10-16 11: 27: 27.327 : V / log_tag (4935): could not establish a network connection
+7
source share
4 answers

I think the main problem in your code is caused by how you use StringEntity to POST parameters for your URL. Check if the following code helps when sending your data to the server using StringEntity .

  // Build the JSON object to pass parameters JSONObject jsonObj = new JSONObject(); jsonObj.put("username", username); jsonObj.put("data", dataValue); // Create the POST object and add the parameters HttpPost httpPost = new HttpPost(url); StringEntity entity = new StringEntity(jsonObj.toString(), HTTP.UTF_8); entity.setContentType("application/json"); httpPost.setEntity(entity); HttpClient client = new DefaultHttpClient(); HttpResponse response = client.execute(httpPost); 

Hope this helps in solving your problem. Thanks.

+2
source

Well, here are my thoughts on your question: -

  • First you just need to send data to the server using the POST method. Its easy and absolutely possible in Android. A simple piece of code to send POST data could be:

     HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost( "http://yourserverIP/postdata.php"); String serverResponse = null; try { List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); nameValuePairs.add(new BasicNameValuePair("datakey1", dataValue1)); nameValuePairs.add(new BasicNameValuePair("datakey2", dataValue2)); httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); HttpResponse response = httpclient.execute(httppost); serverResponse = response.getStatusLine().toString(); Log.e("response", serverResponse); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } 

    The above code sends data to a PHP postdata script to your server.

  • Further, to analyze the JSON data sent by the server, you can use JSONParser , and then easily use it according to your needs. You can get the response returned from the server using the following code:

     String jsonData = EntityUtils.toString(serverResponse.getEntity()); 

Hope this helps. Thanks.

+2
source

try using this method where strJsonRequest is the json string you want to publish and strUrl is the URL you want to send strJsonRequest to

  public String urlPost(String strJsonRequest, String strURL) throws Exception { try { URL objURL = new URL(strURL); connection = (HttpURLConnection)objURL.openConnection(); connection.setDoInput(true); connection.setDoOutput(true); connection.setAllowUserInteraction(false); connection.setUseCaches(false); connection.setConnectTimeout(TIMEOUT_CONNECT_MILLIS); connection.setReadTimeout(TIMEOUT_READ_MILLIS); connection.setRequestMethod("POST"); connection.setRequestProperty("Accept-Charset", "utf-8"); connection.setRequestProperty("Content-Type", "application/json; charset=utf-8"); connection.setRequestProperty("Content-Length", ""+strJsonRequest.toString().getBytes("UTF8").length); DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream()); byte [] b = strJsonRequest.getBytes("UTF-8"); outputStream.write(b); outputStream.flush(); inputstreamObj = (InputStream) connection.getContent();//getInputStream(); if(inputstreamObj != null) strResponse = convertStreamToString(inputstreamObj); } catch(Exception e) { throw e; } return strResponse; } 

and the convertStreamToString () method is below

 private static String convertStreamToString(InputStream is) { /* * To convert the InputStream to String we use the BufferedReader.readLine() * method. We iterate until the BufferedReader return null which means * there no more data to read. Each line will appended to a StringBuilder * and returned as String. */ BufferedReader reader = null; try { reader = new BufferedReader(new InputStreamReader(is)); } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); } StringBuilder sb = new StringBuilder(); String line = null; try { while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } } catch (IOException e) { e.printStackTrace(); } finally { try { is.close(); } catch (IOException e) { e.printStackTrace(); } } return sb.toString(); } 
+1
source

Depending on how your code is configured on the server side, the approximate format of the URL where your server has a php page to handle the API call will be:

 http://yoururl.com/demo.php?jsondata=postData 

If you are using a message, you can simply say:

 http://yoururl.com/demo.php 

and pass it your message parameters, i.e. json string

Here is a great tutorial on how to do this: http://yoururl.com/demo.php?jsondata=postData

0
source

All Articles