在Android中使用google-java-api-client设置Google日历查询参数

时间:2011-06-12 00:25:05

标签: java android google-api-java-client

我正在建立一个网址,以便使用google-javi-api访问用户Google日历:

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

返回给我这个网址:

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

我想使用startMin和startMax参数为此URL设置参数,因此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”取代,“&”正在被“&”

取代

返回的错误网址是:

"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?

**如果您想知道我是如何构建此网址的,我正在使用此CalendarURL中的sample Android implementation of Google Calendar类。

修改

更具体地说,在CalendarURL类中,我可以将部分添加到URL的“路径”,但我找不到包含查询参数的方法。此API不包含指定参数的方法吗?

2 个答案:

答案 0 :(得分:4)

使用google-java-client-api创建网址的正确方法是扩展GoogleUrl对象。 (我在这里使用谷歌纵横作为样本。我创建了一个GoogleUrl对象,稍后您将看到它如何被使用)。

Google网址对象

  • 您构建了一个扩展GoogleUrl的网址对象
  • 使用@Key annotation
  • 注释要在URL上自定义的参数
  • 您提供了一个接受根URL的构造函数。
  • 使用pathParts.add方法
  • 将部件添加到上下文中

示例网址对象如下所示:

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 :(得分:1)

经过一番认真的挖掘后,我发现了如何使用google-java-api包含查询参数。

要将这些Query Parameters中的任何一个添加到网址,请执行以下操作:

构建基本CalendarUrl后,调用.put(“Key”,“Value”)添加查询参数。例如:

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");

我碰巧偶然发现了一个埋在谷歌项目家庭垃圾堆中未经过滤的“问题”的线索。有很多关于使用gData api的文档,但google-java-api没有任何内容。我花了差不多2天才找到这个简单的方法调用。很沮丧。我希望无论是谁读到这篇文章都不会经历我所经历的事情,以找出如何完成这个简单但至关重要的任务。应该更好地记录下来。