Установите параметры запроса Google Calendar с Google-Java-Api-Client в Android
-
27-10-2019 - |
Вопрос
Я создаю 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 дня, чтобы найти этот простой вызов метода. Очень расстраивает. Я надеюсь, что тот, кто это читает, не прошел через то, что я прошел, чтобы узнать, как выполнить эту простую, но важную задачу. Это должно быть лучше задокументировано.