2013-12-16 1 views
0

반복 규칙 "FREQ = MONTHLY; BYMONDDAY = 16; COUNT = 10"으로 이벤트를 만들었습니다. 내 두 개의 Android 캘린더 앱 및 Google 캘린더 웹 사이트에서 이벤트를 보았습니다. 내 앱에서 다른 모든 일정을 읽을 수는 있지만이 일정은 표시되지 않습니다. 차이점은이 이벤트에 반복 규칙이 있다는 것입니다. 여기 내 독서 코드입니다.반복 규칙을 사용하여 달력 이벤트를 읽을 수 없습니다.

public static MyEvents readCalendarMyEvent(Context context,Date date1, Date date2, int calendarID) 
{ 
    try 
    { 
      Calendar calendar1 = Calendar.getInstance(); 
      calendar1.setTime(date1); 
      Calendar calendar2 = Calendar.getInstance(); 
      calendar2.setTime(date2); 
      Uri l_eventUri; 

      if (Build.VERSION.SDK_INT >= 8) { 
       l_eventUri = Uri.parse("content://com.android.calendar/events"); 
      } else { 
       l_eventUri = Uri.parse("content://calendar/events"); 
      } 
      ContentResolver contentResolver = context.getContentResolver(); 
      String dtstart = "dtstart"; 
      String dtend = "dtend"; 

      String[] l_projection = new String[] { CalendarContract.Events.CALENDAR_ID, 
        CalendarContract.Events.TITLE, //1 
        CalendarContract.Events.DESCRIPTION, 
        CalendarContract.Events.DTSTART, 
        CalendarContract.Events.DTEND, 
        CalendarContract.Events.EVENT_LOCATION, 
        CalendarContract.Events.EVENT_TIMEZONE,//6 
        CalendarContract.Events.HAS_ALARM, 
        CalendarContract.Events.RRULE, 
        CalendarContract.Events.RDATE, 
        CalendarContract.Events.ORGANIZER, 
        CalendarContract.Events.SELF_ATTENDEE_STATUS,//11 
        CalendarContract.Events.GUESTS_CAN_MODIFY, 
        CalendarContract.Events._ID,     
        CalendarContract.Events.ALL_DAY, 
        CalendarContract.Events.DELETED, 
        CalendarContract.Events.GUESTS_CAN_INVITE_OTHERS,//16 
        CalendarContract.Events.GUESTS_CAN_SEE_GUESTS, 
        CalendarContract.Events.ALL_DAY, 
        CalendarContract.Events.ACCESS_LEVEL, 
        CalendarContract.Events.AVAILABILITY, 
        CalendarContract.Events.EXRULE, 
        CalendarContract.Events.EXDATE 
        }; 
      String where = "(" + dtstart + ">" 
        + calendar1.getTimeInMillis() + " and " 
        + dtend + "<" + calendar2.getTimeInMillis() + " and "+ 
        CalendarContract.Events.CALENDAR_ID + " = '" + String.valueOf(calendarID) +"')"; 
      Cursor cursor= contentResolver.query(l_eventUri, l_projection, where, null, 
        "dtstart ASC"); 
      cursor.moveToFirst(); 
      // fetching calendars id 
      String str=""; 
      MyEvents myEvents = new MyEvents(); 
      for (int i = 0; i < cursor.getCount(); i++) { 
       int delete = cursor.getInt(15); 
       if(delete == 1) 
       { 
        cursor.moveToNext(); 
        continue; 
       } 
       MyEvent myEvent = new MyEvent(); 
       myEvent.ID = cursor.getInt(0); 
       myEvent.TITLE = cursor.getString(1);    
       myEvent.Note = cursor.getString(2); 
       str = cursor.getString(3); 
       if(str != null || str.length() <1) 
       { 
        myEvent.START_DATE = MillisecondsToDateTime(Long.parseLong(str)); 
        myEvent.StartDate = getDate(Long.parseLong(str)); 
       } 
       else 
       { 
        cursor.moveToNext(); 
        continue;    
       } 
       str = cursor.getString(4); 
       if(str != null || str.length() <1) 
        myEvent.END_DATE = MillisecondsToDateTime(Long.parseLong(str)); 
       myEvent.EVENT_LOCATION =cursor.getString(5); 
       myEvent.EVENT_TIMEZONE =cursor.getString(6); 
       myEvent.HAS_ALARM = cursor.getInt(7); 
       myEvent.RRULE = cursor.getString(8); 
       myEvent.RDATE = cursor.getString(9); 
       myEvent.ORGANIZER =cursor.getString(10);   
       myEvent.SELF_ATTENDEE_STATUS = cursor.getInt(11);   
       myEvent.GUESTS_CAN_MODIFY = cursor.getInt(12); 
       myEvent.EVENT_ID = cursor.getInt(13); 
       myEvent.ALL_DAY = cursor.getInt(14); 
       myEvent.GUESTS_CAN_INVITE_OTHERS= cursor.getInt(16); 
       myEvent.GUESTS_CAN_SEE_GUESTS= cursor.getInt(17); 
       myEvent.ALL_DAY= cursor.getInt(18); 
       myEvent.ACCESS_LEVEL= cursor.getInt(19); 
       myEvent.AVAILABILITY= cursor.getInt(20); 
       myEvent.EXRULE = cursor.getString(21); 
       myEvent.EXDATE = cursor.getString(22);   
       myEvents.Add(myEvent); 
       cursor.moveToNext(); 
      } 
      return myEvents; 
    } 
    catch(Exception ex) 
    { 
     ex.printStackTrace(); 
    } 
    return new MyEvents(); 
} 

답변

0

문제가 해결되었습니다. where 절에서 실수를했습니다. 다음은 맞습니다

 String where = "(" + dtstart + ">" 
        + calendar1.getTimeInMillis() + " and " 
        + dtstart + "<" + calendar2.getTimeInMillis() + " and "+ 
        CalendarContract.Events.CALENDAR_ID + " = '" + String.valueOf(calendarID) +"')"; 
관련 문제