尝试获取谷歌日历服务时出错



我正在开发一个AppEngine应用程序,在那里我必须使用Google Calendar API。由于某些原因,我们没有使用此API(v3)的最新版本,我们正在使用gdata-calendar-v2,该版本将一直工作到明年11月。

好吧,我有两种使用日历服务的方法。一方面,我在日历上添加了一个新的活动,我做了一些类似的事情:

CalendarService myService =  new CalendarService("my_calendar"); // error on this line   
myService.setUserCredentials(EMAIL, PASSWORD);

据我所知,它运行良好,我正在日历上添加新的事件,没有任何问题。

另一方面,我有另一种方法,我可以做一些不同的事情,但我使用相同的代码片段连接到谷歌日历。在这种情况下,我得到这个错误:

Caused by: java.lang.NoSuchMethodError: com.google.common.collect.ImmutableSet.copyOf([Ljava/lang/Object;)Lcom/google/common/collect/ImmutableSet;
  at com.google.gdata.wireformats.AltFormat$Builder.setAcceptableTypes(AltFormat.java:399)
  at com.google.gdata.wireformats.AltFormat$Builder.setAcceptableXmlTypes(AltFormat.java:387)
  at com.google.gdata.wireformats.AltFormat.<clinit>(AltFormat.java:49)
  at com.google.gdata.client.Service.<clinit>(Service.java:558)

我正在使用的库-收藏-你可能会感兴趣的是:

  • Guava 11(我已经更新到18了,也是同样的问题)

我知道这里有一个非常相似的线程也有同样的问题,但有一个区别:它在我项目的一种方法中运行良好,而在另一个方法中运行不好。

你能帮我一把吗?

提前感谢您,迭戈。

解决方案:

我一直在谷歌上搜索,发现了这个帖子我已经把我的番石榴换成了番石榴-10.0.1.jar,我再也没有这个错误了。

用于java的gdata客户端库的最新版本(截至本文撰写之时,版本为1.46.0,可在此处找到:https://code.google.com/p/gdata-java-client/downloads/list)仍然在它们的依赖项中嵌入了google-collections-1.0-rc1.jar,在这一点上,它无法被最新的番石榴版本所取代。

很可能您使用了两个不同版本的Guava。添加行

System.out.println(ImmutableSet.class.getClass().getResource("/"));

到异常前的行,以找出冲突版本所在的位置。


目前Guava有的方法

public static <E> ImmutableSet<E> copyOf(E[] elements) {}

一些旧版本(例如,谷歌收藏)没有。看起来像

com.google.gdata.wireformats.AltFormat$Builder

访问旧版本。

最新更新