Установите параметры запроса Google Calendar с Google-Java-Api-Client в Android

StackOverflow https://stackoverflow.com/questions/6319361

Вопрос

Я создаю URL, чтобы получить доступ к календарю Google пользователей с Google-Javi-API как таковым:

CalendarUrl url = CalendarUrl.forEventFeed("accountName", "private", "full");

Что возвращает мне этот URL:

"https://www.google.com/calendar/feeds/user@gmail.com/private/full?prettyprint=true"

Я хотел бы установить параметры на этот URL с параметрами Startmin и StartMax, чтобы URL в конечном итоге выглядел так:

"https://www.google.com/calendar/feeds/default/private/full?start-min=2011-06-00T00:00:00&start-max=2011-06-24T23:59:59"

Все мои попытки этого потерпели неудачу, и после регистрации возвращаемого URL -адреса я обнаружил, что "?" заменяется на «%3F», а амперсанды заменяются на «&»

Неверный URL, который принесен, является:

"https://www.google.com/calendar/feeds/default/private/full%3Fstart-min=2011-06-00T00:00:00&start-max=2011-06-24T23:59:59"

Я почти уверен, что причина, по которой мой набор результатов является NULL, связана с этими заменами символов. Как добавить исходный URL с новыми параметрами?

** Если вам интересно, как я строю этот URL, я использую Календарурл класс из этого Образец реализации Android календаря Google.

РЕДАКТИРОВАТЬ

Более конкретно, в Календарурл Класс, я могу добавить детали в «путь» URL, но я не могу найти способ включить параметр запроса. Разве этот API не включает способ указать параметр?

Это было полезно?

Решение

Правильный способ создания URL-адреса с использованием Google-Java-Client-API-расширить объект Googleurl. (Я использую Google Latitude здесь в качестве образца. Я создаю объект Googleurl, а позже вы увидите, как он используется).

Объект URL Google

  • Вы строите объект URL, расширяющий Googleurl
  • Вы аннотируете параметры, которые вы хотели бы настроить на URL -адрес
  • Вы предоставляете конструктор, который берет на себя корневой URL.
  • Вы добавляете части в контекст, используя метод pathparts.add

Образец объекта URL выглядит так:

public final class LatitudeUrl extends GoogleUrl {

  @Key
  public String granularity;

  @Key("min-time")
  public String minTime;

  @Key("max-time")
  public String maxTime;

  @Key("max-results")
  public String maxResults;

  /** Constructs a new Latitude URL from the given encoded URI. */
  public LatitudeUrl(String encodedUrl) {
    super(encodedUrl);
  }

  private static LatitudeUrl root() {
    return new LatitudeUrl("https://www.googleapis.com/latitude/v1");
  }

  public static LatitudeUrl forCurrentLocation() {
    LatitudeUrl result = root();
    result.pathParts.add("currentLocation");
    return result;
  }

  public static LatitudeUrl forLocation() {
    LatitudeUrl result = root();
    result.pathParts.add("location");
    return result;
  }

  public static LatitudeUrl forLocation(Long timestampMs) {
    LatitudeUrl result = forLocation();
    result.pathParts.add(timestampMs.toString());
    return result;
  }
}

Применение

Вы используете этот объект для построения URL, просто заполните свои параметры (аннотированные поля @key) и выполните метод Build (), чтобы получить его строковое представление:

    LatitudeUrl latitudeUrl = LatitudeUrl.forLocation();
    latitudeUrl.maxResults="20";
    latitudeUrl.minTime="123";
    latitudeUrl.minTime="456";

    System.out.println(latitudeUrl.build());

Выход :

https://www.googleapis.com/latitude/v1/location?max-results=20&min-time=456

Другие советы

После некоторого серьезного копания я узнал, как включить параметры запроса с использованием Google-Java-API.

Чтобы добавить любой из них Параметры запроса на URL, сделайте следующее:

После создания основного календарурла, вызовите .put («ключ», «значение»), чтобы добавить параметры запроса. Например:

CalendarUrl eventFeedUrl = CalendarUrl.forEventFeed("user@gmail.com", "private", "full");

  eventFeedUrl.put("start-min", "2011-06-01T00:00:00");
  eventFeedUrl.put("start-max", "2011-06-22T00:00:00");

Я только что наткнулся на нить, похороненную в разгар мусора нефильтрованных «проблем» в доме проекта в Google. Есть много документации для использования API GDATA, но для Google-Java-API нет ничего. Мне потребовалось почти 2 дня, чтобы найти этот простой вызов метода. Очень расстраивает. Я надеюсь, что тот, кто это читает, не прошел через то, что я прошел, чтобы узнать, как выполнить эту простую, но важную задачу. Это должно быть лучше задокументировано.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top