title: How can I slow down API requests?
body: <p>I'm using a makeServiceCall to get JSON data from TheMovieDB API.</p>
  
  <p>As they don't have a list of movie id's I have to for loop through id's.</p>
  
  <pre><code>String JSONString = httpHandler.makeServiceCall("https://api.themoviedb.org/3/movie/" + 
                                         i + 
                                         "?api_key=" + API_KEY);
  </code></pre>
  
  <p>i = id</p>
  
  <p>API_KEY = my API key.</p>
  
  <p>As I'm looping through the URL I get IOExceptions for some of the calls.</p>
  
  <pre><code>I/System.out: ID:   152
  I/System.out: ID:   160
  I/System.out: ID:   165
  I/System.out: ID:   168
  I/System.out: ID:   171
  E/HttpHandler: IOException: https://api.themoviedb.org/3/movie/181?api_key=b692b9da86f1cf0c1b623ea6e2770101
  E/HttpHandler: IOException: https://api.themoviedb.org/3/movie/184?api_key=b692b9da86f1cf0c1b623ea6e2770101
  E/HttpHandler: IOException: https://api.themoviedb.org/3/movie/185?api_key=b692b9da86f1cf0c1b623ea6e2770101
  E/HttpHandler: IOException: https://api.themoviedb.org/3/movie/186?api_key=b692b9da86f1cf0c1b623ea6e2770101
  E/HttpHandler: IOException: https://api.themoviedb.org/3/movie/187?api_key=b692b9da86f1cf0c1b623ea6e2770101
  E/HttpHandler: IOException: https://api.themoviedb.org/3/movie/188?api_key=b692b9da86f1cf0c1b623ea6e2770101
  E/HttpHandler: IOException: https://api.themoviedb.org/3/movie/189?api_key=b692b9da86f1cf0c1b623ea6e2770101
  E/HttpHandler: IOException: https://api.themoviedb.org/3/movie/190?api_key=b692b9da86f1cf0c1b623ea6e2770101
  E/HttpHandler: IOException: https://api.themoviedb.org/3/movie/191?api_key=b692b9da86f1cf0c1b623ea6e2770101
  E/HttpHandler: IOException: https://api.themoviedb.org/3/movie/192?api_key=b692b9da86f1cf0c1b623ea6e2770101
  </code></pre>
  
  <p>Some of the IOExceptions are just URL's that came back as null, as </p>
  
  <pre><code>{"status_code":34,"status_message":"The resource you requested could not be found."}
  </code></pre>
  
  <p>How can I slow down the for loop to not exceed the API call limit?</p>
  
  <p>HttpHandler:</p>
  
  <pre><code>package com.example.zdroa.yplex;
  
  import android.util.Log;
  
  import java.io.BufferedInputStream;
  import java.io.BufferedReader;
  import java.io.IOException;
  import java.io.InputStream;
  import java.io.InputStreamReader;
  import java.net.HttpURLConnection;
  import java.net.MalformedURLException;
  import java.net.ProtocolException;
  import java.net.URL;
  
  public class HttpHandler {
      private static final String TAG = HttpHandler.class.getSimpleName();
  
      public HttpHandler() {
      }
  
      public String makeServiceCall(String reqUrl) {
          String response = null;
          try {
              URL url = new URL(reqUrl);
              HttpURLConnection conn = (HttpURLConnection) url.openConnection();
              conn.setRequestMethod("GET");
              // read the response
              InputStream in = new BufferedInputStream(conn.getInputStream());
              response = convertStreamToString(in);
          } catch (MalformedURLException e) {
              Log.e(TAG, "MalformedURLException: " + e.getMessage());
          } catch (ProtocolException e) {
              Log.e(TAG, "ProtocolException: " + e.getMessage());
          } catch (IOException e) {
              Log.e(TAG, "IOException: " + e.getMessage());
          } catch (Exception e) {
              Log.e(TAG, "Exception: " + e.getMessage());
          }
          return response;
      }
      private String convertStreamToString(InputStream is) {
          BufferedReader reader = new BufferedReader(new InputStreamReader(is));
          StringBuilder sb = new StringBuilder();
          String line;
          try {
              while ((line = reader.readLine()) != null) {
                  sb.append(line).append('\n');
              }
          } catch (IOException e) {
              e.printStackTrace();
          } finally {
              try {
                  is.close();
              } catch (IOException e) {
                  e.printStackTrace();
              }
          }
          return sb.toString();
      }
  }
  </code></pre>
  
  <p>My calls are made inside of an AsyncTask</p>
  
  <pre><code>class getWorkingIdsFromAPI extends AsyncTask&lt;Void, Void, Void&gt; {
  
      ArrayList&lt;String&gt; alPersonType;
  
      public getWorkingIdsFromAPI(ArrayList&lt;String&gt; arrayList) {
          alPersonType = new ArrayList&lt;&gt;(arrayList);
      }
  
      @Override
      protected Void doInBackground(Void... params) {
  
          final HttpHandler httpHandler = new HttpHandler();
  
          Timer timer = new Timer();
          timer.schedule(new TimerTask() {
                             @Override
                             public void run() {
                                 for (int i = 0; i &lt; 200; i++) { //20000
                                     String JSONString = httpHandler.makeServiceCall("https://api.themoviedb.org/3/movie/" + i + "?api_key=" + API_KEY);
  
                                     if (JSONString != null) {
                                         try {
                                             JSONObject jsonObject = new JSONObject(JSONString);
                                             JSONArray jsonArray = jsonObject.getJSONArray("genres");
  
                                             boolean cont = true;
  
                                             for (int a = 0; a &lt; jsonArray.length(); a++) {
  
                                                 JSONObject jsonObject1 = jsonArray.getJSONObject(a);
                                                 String string = jsonObject1.getString("name");
  
                                                 for (int b = 0; b &lt; alPersonType.size(); b++) {
                                                     if (string.equals(alPersonType.get(b))) {
                                                         cont = false;
                                                     }
                                                 }
                                             }
  
                                             if (cont) {
                                                 String id = String.valueOf(jsonObject.getInt("id"));
                                                 System.out.println("ID:   " + id);
  
                                                 switch (id.length()) {
                                                     case 1:
                                                         id = "0000" + id;
                                                         break;
                                                     case 2:
                                                         id = "000" + id;
                                                         break;
                                                     case 3:
                                                         id = "00" + id;
                                                         break;
                                                     case 4:
                                                         id = "0" + id;
                                                         break;
                                                 }
                                                 switch (i) {
                                                     case 1:
                                                         STRING_LIST_OF_IDS = STRING_LIST_OF_IDS + id;
                                                         break;
                                                     default:
                                                         STRING_LIST_OF_IDS = ", " + STRING_LIST_OF_IDS + id;
                                                         break;
                                                 }
                                             }
  
                                         } catch (JSONException e) {
                                             e.printStackTrace();
                                         }
                                     }
                                 }
                             }
                         }
  
                  , 3000);
  
  
          return null;
      }
  
  
      @Override
      protected void onPostExecute(Void aVoid) {
          super.onPostExecute(aVoid);
  
          //add STRING_LIST_OF_IDS
          getStringOfIdsFromDB();
      }
  }
  </code></pre>