<T, R extends ApiResponse<T>> PendingResult<T> get(
      ApiConfig config,
      Class<? extends R> clazz,
      Map<String, String> headers,
      Map<String, List<String>> params) {
    if (channel != null && !channel.isEmpty() && !params.containsKey("channel")) {
      params.put("channel", Collections.singletonList(channel));
    }

    StringBuilder query = new StringBuilder();

    for (Map.Entry<String, List<String>> param : params.entrySet()) {
      List<String> values = param.getValue();
      for (String value : values) {
        query.append('&').append(param.getKey()).append("=");
        try {
          query.append(URLEncoder.encode(value, "UTF-8"));
        } catch (UnsupportedEncodingException e) {
          // This should never happen. UTF-8 support is required for every Java implementation.
          throw new IllegalStateException(e);
        }
      }
    }

    return getWithPath(
        clazz,
        config.fieldNamingPolicy,
        config.hostName,
        config.path,
        config.supportsClientId,
        query.toString(),
        requestMetricsReporter.newRequest(config.path),
        headers);
  }
Shut down this GeoApiContext instance, reclaiming resources. After shutdown() has been called,
no further queries may be done against this instance.
src/main/java/com/google/maps/GeoApiContext.java