0

I'm trying to download a json file from server using code below. However, my app behaves weirdly. Sometimes, the json gets downloaded in 1-2 secs and sometimes it gets stuck on this function forever. I've also tried alternative ways to download like HttpUrlConnection. However, that doesn't help either. Can anyone suggest me a fix to it !!

public String getJSONString(String url) {
        String json = null;
        HttpClient httpclient = null;
        try {
            Log.d("MARKER","PARSING SE PEHLE");
            HttpParams params = new BasicHttpParams();
            Log.d("MARKER","1st line");
            HttpClient httpclient = new DefaultHttpClient(params);              HttpPost httpPost = new HttpPost(url);

            HttpResponse httpResponse = httpclient.execute(httpPost);

            HttpEntity httpEntity = httpResponse.getEntity();    
            is = httpEntity.getContent();

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 80000);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) 
            {sb.append(line + "\n");}
            is.close();
            json = sb.toString();
        } catch (Exception e) {
            Log.e("Buffer Error", "Error converting result " + e.toString());
        }
        Log.d("MARKER","DOWNLOAD COMPLETE");
        HttpClientProvider.safeClose(httpclient);
        return json;

    }
Gaurav Arora
  • 17,124
  • 5
  • 33
  • 44

1 Answers1

0

Try this:

public class JSONParser {

   static InputStream is = null;
   static JSONObject jObj = null;
   static String json = "";

   // constructor
   public JSONParser() {

   }

   // function get json from url
   // by making HTTP POST or GET method
   public JSONObject makeHttpRequest(String url, String method, List<NameValuePair> params) {

      // Making HTTP request
      try {

         // check for request method
         if (method == "POST") {
            // request method is POST
            // defaultHttpClient
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url);
            httpPost.setEntity(new UrlEncodedFormEntity(params));

            HttpResponse httpResponse = httpClient.execute(httpPost);
            HttpEntity httpEntity = httpResponse.getEntity();
            is = httpEntity.getContent();

         } else if (method == "GET") {
            // request method is GET
            DefaultHttpClient httpClient = new DefaultHttpClient();
            String paramString = URLEncodedUtils.format(params, "utf-8");
            url += "?" + paramString;
            HttpGet httpGet = new HttpGet(url);

            HttpResponse httpResponse = httpClient.execute(httpGet);
            HttpEntity httpEntity = httpResponse.getEntity();
            is = httpEntity.getContent();
         }

      } catch (UnsupportedEncodingException e) {
         e.printStackTrace();
      } catch (ClientProtocolException e) {
         e.printStackTrace();
      } catch (IOException e) {
         e.printStackTrace();
      }

      if (is == null)
         return new JSONObject();

      try {
         BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8);
         StringBuilder sb = new StringBuilder();
         String line = null;
         while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
         }
         is.close();
         json = sb.toString();
      } catch (Exception e) {
         Log.e("Buffer Error", "Error converting result " + e.toString());
      }

      // try parse the string to a JSON object
      try {
         jObj = new JSONObject(json);
      } catch (JSONException e) {
         Log.e("JSON Parser", "Error parsing data " + e.toString());
      }

      // return JSON String
      return jObj;

   }
}

You may populate the related object in AsyncTask to avoid another problem. Have fun

String SERVER_URL ="";


List<NameValuePair> params = new ArrayList<NameValuePair>();
// getting JSON string from URL
JSONObject json = jsonParser.makeHttpRequest(SERVER_URL, "GET", params);
BenMorel
  • 34,448
  • 50
  • 182
  • 322
Festus Tamakloe
  • 11,231
  • 9
  • 53
  • 65