I'm new to Android development. My question is, do I use AsyncTask in order to make an HTTP GET request (JSON response)? Is this correct? Does anyone know where I can see an example of this if this is indeed true? If not, could you correct me? Thanks!
- 
                    possible duplicate of [Make an HTTP request with android](http://stackoverflow.com/questions/3505930/make-an-http-request-with-android) – 323go Jun 25 '14 at 03:55
- 
                    Possible duplicate of [AsyncTask Android example](http://stackoverflow.com/questions/9671546/asynctask-android-example) – U.Swap Mar 09 '17 at 09:01
- 
                    AsyncTask is deprecated since Android 11 – Peter Bruins Apr 21 '23 at 10:29
7 Answers
Yes you are right, Asynctask is used for short running task such as connection to the network. Also it is used for background task so that you wont block you UI thread or getting exception because you cant do network connection in your UI/Main thread.
example:
class JSONAsyncTask extends AsyncTask<String, Void, Boolean> {
@Override
protected void onPreExecute() {
    super.onPreExecute();
}
@Override
protected Boolean doInBackground(String... urls) {
    try {
        //------------------>>
        HttpGet httppost = new HttpGet("YOU URLS TO JSON");
        HttpClient httpclient = new DefaultHttpClient();
        HttpResponse response = httpclient.execute(httppost);
        // StatusLine stat = response.getStatusLine();
        int status = response.getStatusLine().getStatusCode();
        if (status == 200) {
            HttpEntity entity = response.getEntity();
            String data = EntityUtils.toString(entity);
            JSONObject jsono = new JSONObject(data);
            return true;
        }
    } catch (IOException e) {
        e.printStackTrace();
    } catch (JSONException e) {
        e.printStackTrace();
    }
    return false;
}
protected void onPostExecute(Boolean result) {
}
 
    
    - 26,074
- 6
- 52
- 63
- 
                    4"org.apache.http.legacy" is deprecated, is there a other way to implement this? – Brampage Mar 11 '16 at 12:45
Yes you have 3 choices
Best choice is AsyncTask. You have to implement your network call in doInBackground method of AsyncTaskand in postExecute method update the UI or whatever you want to do with the result.
you can follow follow this tutorial for your requirement
code snippet
@Override
    protected String doInBackground(String... urls) {
      String response = "";
      for (String url : urls) {
        DefaultHttpClient client = new DefaultHttpClient();
        HttpGet httpGet = new HttpGet(url);
        try {
          HttpResponse execute = client.execute(httpGet);
          InputStream content = execute.getEntity().getContent();
          BufferedReader buffer = new BufferedReader(new InputStreamReader(content));
          String s = "";
          while ((s = buffer.readLine()) != null) {
            response += s;
          }
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
      return response;
    }
N.B: As
DefaultHttpClientis deprecated you can use HttpClientBuilder
 
    
    - 6,150
- 5
- 39
- 54
protected String doInBackground(String... strings) {
    String response = "";
    response = ServiceHandler.findJSONFromUrl("url");
    data = response;
    return response;
}
public class ServiceHandler {
    // Create Http connection And find Json
    public static String findJSONFromUrl(String url) {
        String result = "";
        try {
            URL urls = new URL(url);
            HttpURLConnection conn = (HttpURLConnection) urls.openConnection();
            conn.setReadTimeout(150000); //milliseconds
            conn.setConnectTimeout(15000); // milliseconds
            conn.setRequestMethod("GET");
            conn.connect();
            if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
                BufferedReader reader = new BufferedReader(new InputStreamReader(
                        conn.getInputStream(), "iso-8859-1"), 8);
                StringBuilder sb = new StringBuilder();
                String line = null;
                while ((line = reader.readLine()) != null) {
                    sb.append(line + "\n");
                }
                result = sb.toString();
            } else {
                return "error";
            }
        } catch (Exception e) {
            // System.out.println("exception in jsonparser class ........");
            e.printStackTrace();
            return "error";
        }
        return result;
    } // method ends
}
 
    
    - 5,393
- 9
- 44
- 53
 
    
    - 41
- 4
Check this out LINK and emaple from google this one good too
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONException;
import org.json.JSONObject;
import android.util.Log;
public class JSONParser {
  static InputStream is = null;
  static JSONObject jObj = null;
  static String json = "";
  // constructor
  public JSONParser() {
  }
  public JSONObject getJSONFromUrl(String url) {
    // Making HTTP request
    try {
      // defaultHttpClient
      DefaultHttpClient httpClient = new DefaultHttpClient();
      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"), 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;
  }
}
 
    
    - 165
- 1
- 11
Here is simple HttpsURLConnection in ASyncTask class for Https POST/GET web-API calling along with packet-header and JSONObject in body.
import android.os.AsyncTask;
import org.json.JSONObject;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;
import javax.net.ssl.HttpsURLConnection;
/**
 * Class to handle BasicAuth post web-api call.
 */
public class Information extends AsyncTask<String, String, String> {
    @Override
    protected String doInBackground(String... params) {
        try {
            // Creating & connection Connection with url and required Header.
            URL url = new URL("https://example.com/wp-json/jwt-auth/v1/token");
            HttpsURLConnection urlConnection = (HttpsURLConnection) url.openConnection();
            urlConnection.setRequestProperty("Content-Type", "application/json");
            urlConnection.setRequestProperty("header-param_3", "value-3");
            urlConnection.setRequestProperty("header-param_4", "value-4");
            urlConnection.setRequestProperty("Authorization", "Basic Y2tfNDIyODg0NWI1YmZiZT1234ZjZWNlOTA3ZDYyZjI4MDMxY2MyNmZkZjpjc181YjdjYTY5ZGM0OTUwODE3NzYwMWJhMmQ2OGQ0YTY3Njk1ZGYwYzcw");
            urlConnection.setRequestMethod("POST");   //POST or GET
            urlConnection.connect();
            // Create JSONObject Request
            JSONObject jsonRequest = new JSONObject();
            jsonRequest.put("username", "user.name");
            jsonRequest.put("password", "pass@123");
            // Write Request to output stream to server.
            OutputStreamWriter out = new OutputStreamWriter(urlConnection.getOutputStream());
            out.write(jsonRequest.toString());
            out.close();
            // Check the connection status.
            int statusCode = urlConnection.getResponseCode();
            String statusMsg = urlConnection.getResponseMessage();
            // Connection success. Proceed to fetch the response.
            if (statusCode == 200) {
                InputStream it = new BufferedInputStream(urlConnection.getInputStream());
                InputStreamReader read = new InputStreamReader(it);
                BufferedReader buff = new BufferedReader(read);
                StringBuilder dta = new StringBuilder();
                String chunks;
                while ((chunks = buff.readLine()) != null) {
                    dta.append(chunks);
                }
                String returndata = dta.toString();
                return returndata;
            } else {
                //Handle else case
            }
        } catch (ProtocolException e) {
            e.printStackTrace();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}
Here the value of Authentication (Header-parameter) is the Base64 encoded value of [API-key]:[API-Secret] appending the "Basic " string in start. 
In Android Studio, use the Gradle entry as:
compile 'org.apache.httpcomponents:httpcore:4.4.1'
compile 'org.apache.httpcomponents:httpclient:4.5'
 
    
    - 3,322
- 25
- 30
AsyncTask does manage its thread pool, but it is not optimized for network activity. Actually, if you have many HTTP requests to the same server, it is better both in terms of memory consumption and overall performance to keep them on the same thread, and reuse a persistent connection, whenever possible. AsyncTask does not consider such issues.
Instead of forging your own asynchronous HTTP client, consider using one of the few available libraries. Some smart people invested quite a lot of thought into making these robust, flexible and fast.
 
    
    - 56,089
- 9
- 113
- 307
- 
                    What are some of the available async HTTP client libraries? I started to implement one but thought I'm reinventing the wheel. – Gregory Stein Jul 29 '17 at 20:22
- 
                    @GregoryStein you can start with typing this question into Google search box. Add the word "android" if it is relevant for you. – Alex Cohn Jul 30 '17 at 07:47
- 
                    
This is the code which conduct the post request and requests server in the form of json.
{"emailId":"test123@gmail.com","emailIdOTP":"123456","phoneNo":"1111111111"}
AsyncTask:
public class GetAsynTask extends AsyncTask<String, String, String> {
        @Override
        protected String doInBackground(String... params) {
            try {
                // Creating & connection Connection with url and required Header.
                URL url = new URL(JWT_URL);
                HttpsURLConnection urlConnection = (HttpsURLConnection) url.openConnection();
                urlConnection.setRequestProperty("Content-Type", "application/json");
                urlConnection.setRequestMethod("POST");   //POST or GET
                urlConnection.connect();
                // Create JSONObject Request
                JSONObject jsonRequest = new JSONObject();
                jsonRequest.put("emailId", "test123@gmail.com");
                jsonRequest.put("emailIdOTP", "123456");
                jsonRequest.put("phoneNo", "1111111111");
                // Write Request to output stream to server.
                OutputStreamWriter out = new OutputStreamWriter(urlConnection.getOutputStream());
                out.write(jsonRequest.toString());
                out.close();
                // Check the connection status.
                int statusCode = urlConnection.getResponseCode();
                // Connection success. Proceed to fetch the response.
                if (statusCode == 200) {
                    InputStream it = new BufferedInputStream(urlConnection.getInputStream());
                    InputStreamReader read = new InputStreamReader(it);
                    BufferedReader buff = new BufferedReader(read);
                    StringBuilder dta = new StringBuilder();
                    String chunks;
                    while ((chunks = buff.readLine()) != null) {
                        dta.append(chunks);
                    }
                    String returndata = dta.toString();
                    return returndata;
                } else {
                    Toast.makeText(SplashActivity.this, "Something went wrong", Toast.LENGTH_SHORT).show();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
        @Override
        protected void onPostExecute(String resultData) {
            super.onPostExecute(resultData);
            try {
                JSONObject obj = new JSONObject(resultData);
               String name= obj.getString("name");
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }
 
    
    - 657
- 6
- 16
