Preeti Preeti - 4 months ago 46
Android Question

HttpURLConnection response is not working

In my project I have url
like:

localhost:8080/myproject/examples/12


It contains Json values..To access this field Need to put access key as Header.

Now, What I have done is that :

private String doHttpUrlConnectionAction(String desiredUrl)
throws Exception
{
URL url = null;
BufferedReader reader = null;
StringBuilder stringBuilder;

try
{
// create the HttpURLConnection
url = new URL(desiredUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();

// just want to do an HTTP GET here
connection.setRequestMethod("GET");
// connection.setRequestProperty("Content-Type","application/json");
connection.setRequestProperty("API-KEY", "value");

// uncomment this if you want to write output to this url
connection.setDoOutput(true);

// give it 15 seconds to respond
connection.setReadTimeout(15*1000);
connection.connect();

// read the output from the server
// reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));


StringBuilder sb = new StringBuilder();
BufferedReader rd = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String line;
while ((line = rd.readLine()) != null) {
sb.append(line);
}
return sb.toString();

}
catch (Exception e)
{
e.printStackTrace();
throw e;
}
finally
{
// close the reader; this can throw an exception too, so
// wrap it in another try/catch block.
if (reader != null)
{
try
{
reader.close();
}
catch (IOException ioe)
{
ioe.printStackTrace();
}
}
}
}


this code returns output :

Response Code : 200
<table border="0" cellpadding="4" cellspacing="0"><thead><tr><th>status</th><th>statusCode</th><th>data</th></tr></thead><tbody><tr><td statusCode="200" status="1">Array</td></tr></tbody></table>


But when I am accessing this code in httclient, I am getting value properly..

public String ReadHttpResponse(String url){
StringBuilder sb= new StringBuilder();
HttpClient client= new DefaultHttpClient();
HttpGet httpget = new HttpGet(url);
httpget.addHeader("API-KEY", "value");
try {
HttpResponse response = client.execute(httpget);
StatusLine sl = response.getStatusLine();
int sc = sl.getStatusCode();
if (sc==200)
{
HttpEntity ent = response.getEntity();
InputStream inpst = ent.getContent();
BufferedReader rd= new BufferedReader(new InputStreamReader(inpst));
String line;
while ((line=rd.readLine())!=null)
{
sb.append(line);
}
// System.out.println(sb.toString());

}
else
{
System.out.println("I didn't get the response!");


}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return sb.toString();
}


Here,I am getting output properly..

Where is the problem in
HttpUrlConnection
?? What am I doing wrong here?? I have to use
HttpUrlConnection
.Please guys help me out..

Answer

you can make code logic like this for both request POST and GET .its help to reduce code complexity. you can make one method for that and pass parameter to it as needed for GET and POST method

  HttpURLConnection urlConnection = null;
    try {
        // http client

        murl=new URL(url);
        urlConnection = (HttpURLConnection) murl.openConnection();

        urlConnection.setRequestProperty("Content-Type", "application/json;odata=verbose");
        urlConnection.setRequestProperty("Accept", "application/json;odata=verbose");

        // Checking http request method type
        if (method == POST) {
            urlConnection.setRequestMethod("POST");
            urlConnection.setDoInput(true);
            urlConnection.setDoOutput(true);



            if(!jsondata.equals("null")) {
                OutputStream os = urlConnection.getOutputStream();
                BufferedWriter writer = new BufferedWriter(
                        new OutputStreamWriter(os, "UTF-8"));
                writer.write(jsondata);
                writer.flush();
                writer.close();
                os.close();
            }


        } else if (method == GET) {
            // appending params to url
            urlConnection.setRequestMethod("GET");

        }
        resCode = urlConnection.getResponseCode();
        Log.i("TAG", "response code=>" + resCode);
Comments