我有一个应用程序,可以阅读公共Google日历供稿,并使用此日历中的事件填充列表视图。问题是我使用此网址获取Feed http://www.google.com/calendar/feeds/[CalendarID]/public/full?orderby=starttime&max-results=150&singleevents=true&sortorder=ascending&futureevents=true
现在看来谷歌日历api v2已停止使用,此网址无效,并抛出了#34; Forbidden Error 403",以便当我尝试在我的应用中使用它时,它会崩溃
以下是我在该网址中解析xml的代码:
public ArrayList<Agenda> parse() {
ArrayList<Agenda> events = null;
XmlPullParser parser = Xml.newPullParser();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
try
{
parser.setInput(this.getInputStream(), null);
int parserEvent = parser.getEventType();
Agenda event = null;
while (parserEvent != XmlPullParser.END_DOCUMENT)
{
String etiqueta = null;
switch (parserEvent)
{
case XmlPullParser.START_DOCUMENT:
events = new ArrayList<Agenda>();
break;
case XmlPullParser.START_TAG:
etiqueta = parser.getName();
if (etiqueta.equals("entry"))
{
event = new Agenda();
}
else if (event != null)
{
if (etiqueta.equals("title")){
String titol = parser.nextText();
event.setTitol(titol);
Log.d("Titol Event", titol);
}
else if (etiqueta.equals("where")){
String lloc = parser.getAttributeValue(null, "valueString");
event.setLloc(lloc);
}
else if (etiqueta.equals("when")){
Date iniciEvent = null;
Date finalEvent = null;
String dataInici = (parser.getAttributeValue(null, "startTime"));
Log.d("DATA INICI", dataInici);
String dataFinal = (parser.getAttributeValue(null, "endTime"));
if(dataFinal == null){
break;
}
Log.d("DATA FINAL", dataFinal);
try {
iniciEvent = formatter.parse(dataInici);
event.setData(iniciEvent);
formatHoraCorrecta = true;
event.setAllDay(false);
} catch (ParseException e) {
// TODO Auto-generated catch block
Log.d("ERROR FORMAT DATA", e.toString());
formatHoraCorrecta = false;
event.setAllDay(true);
}
if(!formatHoraCorrecta){
dataInici = dataInici + "T00:00:00";
iniciEvent = formatter.parse(dataInici);
event.setData(iniciEvent);
dataFinal = dataFinal + "T00:00:00";
finalEvent = formatter.parse(dataFinal);
event.setDataFinal(finalEvent);
}else{
finalEvent = formatter.parse(dataFinal);
event.setDataFinal(finalEvent);
}
}else if(etiqueta.equals("content")){
event.setDescripcio(parser.nextText());
}
}
break;
case XmlPullParser.END_TAG:
etiqueta = parser.getName();
if (etiqueta.equals("entry") && event != null)
{
events.add(event);
}
break;
}
parserEvent = parser.next();
}
}catch (Exception ex){
Log.d("Exception ex", ex.toString());
throw new RuntimeException(ex);
}
return events;
}
我发现此网址现在显示日历Feed http://www.google.com/calendar/feeds/[CalendarID]/public/basic?orderby=starttime&max-results=150&singleevents=true&sortorder=ascending&futureevents=true,但实际上信息的显示方式完全不同,因此该代码无效。
有没有办法可以解析google calendar v3 feed中的信息,方式与我以前做过的方式类似,或者我必须使用其他方法?
答案 0 :(得分:0)
在Calender v2中,此代码将起作用,因为您收到的响应是xml格式。
但是对于Calender v3,必须更改解析方法以匹配Google Calendar API Version 3.0 Migration Guide中指定的新响应。
您也可以参考这个问题:How to Parse the this JSON Response in JAVA
希望有所帮助!