2014-11-23 2 views
0

공개 캘린더 피드를 읽고이 캘린더의 일정으로 목록보기를 채우는 앱이 있습니다. 문제는 내가이 URL을 사용하여 피드를 얻고 있다는 것입니다. http://www.google.com/calendar/feeds/[CalendarID]/public/full?orderby=starttime&max-results=150&singleevents=true&sortorder=ascending&futureevents=trueGoogle 캘린더 v3 피드를 android에서 구문 분석하는 방법

Google 캘린더 API v2가 중단되었으며,이 URL은 유효하지 않으며 "금지 된 오류 403"이 발생하는 것으로 보입니다. 내 애플 리케이션, itcrashes에서 그것을 사용하려고합니다. 여기

해당 URL에서 XML을 구문 분석하는 내 코드입니다 :이 URL은 이제 달력 공급 http://www.google.com/calendar/feeds/[CalendarID]/public/basic?orderby=starttime&max-results=150&singleevents=true&sortorder=ascending&futureevents=true 보여줍니다 찾을

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; 
} 

하지만 실제로 정보가 표시되는 방법은 완전히 다른되도록 그 코드 작동하지 않습니다.

Google 캘린더 v3 피드에서 정보를 구문 분석 할 수있는 방법이 있나요? 이전에했던 것과 비슷한 방법으로 다른 방법을 사용해야합니까?

답변

0

캘린더 v2에서 수신 한 응답이 xml 형식이므로이 코드가 작동합니다.

그러나 Calender v3의 경우 구문 분석 방법을 Google Calendar API Version 3.0 Migration Guide에 지정된 새 응답과 일치하도록 변경해야합니다.

당신은이 질문에 참조 할 수 있습니다 How to Parse the this JSON Response in JAVA

희망을!

+0

감사합니다. 마지막으로이 튜토리얼에 따라 문제를 해결할 수 있습니다. http://www.androidhive.info/2012/01/android-json-parsing-tutorial –