如何在android中解析google calendar v3 feed

时间:2014-11-23 09:45:40

标签: android google-calendar-api

我有一个应用程序,可以阅读公共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中的信息,方式与我以前做过的方式类似,或者我必须使用其他方法?

1 个答案:

答案 0 :(得分:0)

在Calender v2中,此代码将起作用,因为您收到的响应是xml格式。

但是对于Calender v3,必须更改解析方法以匹配Google Calendar API Version 3.0 Migration Guide中指定的新响应。

您也可以参考这个问题:How to Parse the this JSON Response in JAVA

希望有所帮助!