Установите параметры запроса Календаря Google с помощью google-java-api-client в Android - PullRequest
2 голосов
/ 12 июня 2011

Я создаю 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"

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

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

EDIT

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

Ответы [ 2 ]

4 голосов
/ 13 июня 2011

Правильный способ создать URL с помощью google-java-client-api - это расширить объект GoogleUrl. (Я использую Локатор Google здесь в качестве примера. Я создаю объект GoogleUrl, и позже вы увидите, как он используется).

Объект Google URL

  • Вы создаете объект URL, расширяющий GoogleUrl
  • Вы аннотируете параметры, которые хотите настроить, с помощью аннотации @Key
  • Вы предоставляете конструктор, который принимает корневой 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
1 голос
/ 12 июня 2011

После серьезного поиска я узнал, как включить параметры запроса с помощью google-java-api.

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

После создания базового CalendarUrl вызовите .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 дня, чтобы найти этот простой вызов метода.Очень расстраивает.Я надеюсь, что тот, кто читает это, не прошел через то, через что я прошел, чтобы выяснить, как выполнить эту простую, но важную задачу.Это должно быть лучше задокументировано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...