我正在建立一个网址,以便使用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不包含指定参数的方法吗?
答案 0 :(得分:4)
使用google-java-client-api创建网址的正确方法是扩展GoogleUrl对象。 (我在这里使用谷歌纵横作为样本。我创建了一个GoogleUrl对象,稍后您将看到它如何被使用)。
Google网址对象
示例网址对象如下所示:
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天才找到这个简单的方法调用。很沮丧。我希望无论是谁读到这篇文章都不会经历我所经历的事情,以找出如何完成这个简单但至关重要的任务。应该更好地记录下来。