@Override
  protected List<MovieInfo> doInBackground(String... params) {
    // Decode sorting preference from param[0]
    String sortby =
        (params[0].equals(associatedAdapter.getContext().getString(R.string.pref_sort_popular))
            ? "popularity.desc"
            : params[0].equals(associatedAdapter.getContext().getString(R.string.pref_sort_rating))
                ? "vote_average.desc"
                : "");

    List<MovieInfo> movieInfos = null;
    try {
      // Build URI for querying TheMovieDB
      Uri builtUri =
          Uri.parse(TMDB_BASE_URL)
              .buildUpon()
              .appendPath(TMDB_DISCOVER_PARAM1)
              .appendPath(TMDB_DISCOVER_PARAM2)
              .appendQueryParameter(TMDB_SORT, sortby)
              .appendQueryParameter(TMDB_KEY, MY_KEY)
              .build();
      URL url = new URL(builtUri.toString());
      // Log.v(LOG_TAG, "TMDB movie info url: " + url.toString());

      // Call TMDB
      String jsonString = doCallJson(url);

      // Loop through result and populate movie info
      movieInfos = new ArrayList<MovieInfo>();
      JSONObject json = new JSONObject(jsonString);
      JSONArray jArray = json.getJSONArray("results");
      for (int i = 0; i < jArray.length(); i++) {
        JSONObject oneMovie = jArray.getJSONObject(i);

        MovieInfo movieInfo = new MovieInfo();
        movieInfo.imageUrl = TMDB_IMAGE_URL + oneMovie.getString("poster_path");
        movieInfo.originalTitle = ensureGoodString(oneMovie.getString("original_title"));
        movieInfo.plotSynopsis = ensureGoodString(oneMovie.getString("overview"));
        movieInfo.rating = ensureGoodString(oneMovie.getString("vote_average"));
        movieInfo.releaseDate = ensureGoodString(oneMovie.getString("release_date"));

        movieInfos.add(movieInfo);

        // Log.v(LOG_TAG, "Added movie: " + movieInfo.originalTitle);
      }
    } catch (Exception e) {
      Log.e(LOG_TAG, "Error", e);
    }
    return movieInfos;
  }