`
mypyg
  • 浏览: 545288 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Android下使用googleapi-client-java操作google calendar(三)

阅读更多
4.获取日历列表并显示:
原理:向https://www.google.com/calendar/feeds/allcalendars/full发送GET请求然后解析响应。
发送时牵扯到HTTP Header生成,重定向以及把数据解析成为Java对象等操作,这些库函数都提供了接口可用。
在googleapi-client-api的例子中提供了一个model,此model对库的接口针对calendar又进行了一次封装,可以直接复制到代码中使用。
4.1 CalendarUrl类:继承自GoogleUrl,扩展了一些获取url的函数。
CalendarUrl url = CalendarUrl.forAllCalendarsFeed(); //构造获取feed的url串。如果要删除日历,那么这儿要换成forOwnCalendarsFeed(),否则删除时会返回http 500错误。
4.2 CalendarFeed类:定义了一个成员变量,是calendar的列表,通过Java Annotation,库函数可以通过反射机制取到这个变量,并将解析后的CalendarEntry填充到此列表中来。
CalendarFeed feed = CalendarFeed.executeGet(mTransport, url); //从网络获取数据并解析成feed对象。
4.3 在列表中显示:
calendarNames = new String[numCalendars];
for (int i = 0; i < numCalendars; i++) {
calendarNames[i] = calendars.get(i).title; //更新数组
}
setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, calendarNames)); //更新列表。

5.获取某个日历的事件列表并显示:
向日历所保存的事件url发送get请求。
CalendarEntry calendar = mCalendars.get(position);
CalendarUrl url = new CalendarUrl(calendar.getEventFeedLink()); //获得event url
EventFeed efeed = EventFeed.executeGet(mTransport, url); //发送请求,从网络获得event feed
在EventFeed中保存了所有entry列表,可以通过EvnentFeed.getEntries()来获得。

6.日历操作:
6.1 添加日历:
原理:向https://www.google.com/calendar/feeds/owncalendars/full发送数据。
获取目标url:
CalendarUrl url = CalendarUrl.forOwnCalendarsFeed();
创建新的日历对象:
CalendarEntry ncalendar = new CalendarEntry();
设置标题:
ncalendar.title = "Calendar " + new DateTime(new Date());
执行插入操作:
ncalendar.executeInsert(mTransport, url);
6.2 删除日历:
原理:向calendar entry的编辑url发送HTTP DELETE请求。这个编辑url是服务器返回并被解析后保存在calendar对象中的。
获取要删除的日历对象,执行删除操作。
calendar.executeDelete(mTransport);
6.3 修改日历:
原理:向calendar entry的编辑url发送HTTP PATCH请求。
从原日历clone一个对象,然后执行patch函数。
CalendarEntry patchedCalendar = calendar.clone();
//modify
patchedCalendar.title = calendar.title + " UPDATED " + new DateTime(new Date());
//更新到网络
patchedCalendar.executePatchRelativeToOriginal(mTransport, calendar);
6.4 添加事件:
原理:向所属的calendar的event feed url发送数据。
event = new EventEntry();
event.title = "title";
When when = new When();
when.startTime = new DateTime(new Data());
event.when = when;
CalendarUrl url = new CalendarUrl(calendar.getEventFeedLink());
event.executeInsert(mTransport, url);
6.5 删除事件:
原理:发送DELETE请求。
event.executeDelete(mTransport);
需要注意的是执行delete时我收到的结果是403,始终不能成功删除。
以“google api client delete calendar event forbidden"搜索发现此问题别人也有遇到,查阅资料:
http://code.google.com/apis/gdata/docs/2.0/basics.html
在Deleting an entry一节提到:
To do an unconditional delete, set the following HTTP header:If-Match: *
所以需要修改executeDelete函数,补充一行:request.headers.ifMatch = "*";
正常应该是ifMatch=etag,etag的作用参见Updating an entry一节:
You also have to specify the original entry's ETag, to ensure that you don't overwrite anyone else's changes.
以上理解未必正确,如有指教可直接回复。
6.6 修改事件:
event.executePatchRelativeToOriginal(mTransport, event);
同样也要修改一下executePatchRelativeToOriginal函数,增加:
request.headers.ifMatch = "*";
对于删除Calendar以及修改Calendar这一行加不加没影响。

仓促成文,附件的例子也有一些冗余代码未修改,日后再加工。
3
0
分享到:
评论
1 楼 pengpengpp 2011-07-06  
我的项目中正需要中。收下了。学习学习

相关推荐

    Android代码-农历生日

    农历生日 for Google calendar 农历生日是用来同步农历生日到 Google 日历, 因为 Google 日历不能创建农历重复事件. ...Google API Client Library for Java Lunar-Solar-Calendar-Converter License MIT

    java开源包1

    google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 SpeechLion.tar SpeechLion 是一个语音识别程序,主要用来处理桌面命令,基于 Sphinx-4 语音识别引擎开发。用户可以通过该软件来...

    java开源包10

    google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 SpeechLion.tar SpeechLion 是一个语音识别程序,主要用来处理桌面命令,基于 Sphinx-4 语音识别引擎开发。用户可以通过该软件来...

    JAVA上百实例源码以及开源项目

     Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...

    JAVA上百实例源码以及开源项目源代码

     Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...

    java开源包8

    google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 SpeechLion.tar SpeechLion 是一个语音识别程序,主要用来处理桌面命令,基于 Sphinx-4 语音识别引擎开发。用户可以通过该软件来...

    java开源包11

    google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 SpeechLion.tar SpeechLion 是一个语音识别程序,主要用来处理桌面命令,基于 Sphinx-4 语音识别引擎开发。用户可以通过该软件来...

    java开源包6

    google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 SpeechLion.tar SpeechLion 是一个语音识别程序,主要用来处理桌面命令,基于 Sphinx-4 语音识别引擎开发。用户可以通过该软件来...

    java开源包4

    google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 SpeechLion.tar SpeechLion 是一个语音识别程序,主要用来处理桌面命令,基于 Sphinx-4 语音识别引擎开发。用户可以通过该软件来...

    java开源包9

    google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 SpeechLion.tar SpeechLion 是一个语音识别程序,主要用来处理桌面命令,基于 Sphinx-4 语音识别引擎开发。用户可以通过该软件来...

    java开源包101

    google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 SpeechLion.tar SpeechLion 是一个语音识别程序,主要用来处理桌面命令,基于 Sphinx-4 语音识别引擎开发。用户可以通过该软件来...

    java开源包5

    google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 SpeechLion.tar SpeechLion 是一个语音识别程序,主要用来处理桌面命令,基于 Sphinx-4 语音识别引擎开发。用户可以通过该软件来...

    java开源包3

    google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 SpeechLion.tar SpeechLion 是一个语音识别程序,主要用来处理桌面命令,基于 Sphinx-4 语音识别引擎开发。用户可以通过该软件来...

    java开源包2

    google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 SpeechLion.tar SpeechLion 是一个语音识别程序,主要用来处理桌面命令,基于 Sphinx-4 语音识别引擎开发。用户可以通过该软件来...

    java开源包7

    google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 SpeechLion.tar SpeechLion 是一个语音识别程序,主要用来处理桌面命令,基于 Sphinx-4 语音识别引擎开发。用户可以通过该软件来...

    Java资源包01

    google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 SpeechLion.tar SpeechLion 是一个语音识别程序,主要用来处理桌面命令,基于 Sphinx-4 语音识别引擎开发。用户可以通过该软件来...

Global site tag (gtag.js) - Google Analytics