2011-11-23 2 views
0

인 텐트를 사용하지 않고 백그라운드에서 캘린더 일정을 추가하려고합니다. 일정이 성공적으로 저장됩니다. 그러나 그 이벤트를 수동으로 편집하려고하면 Force Close 오류가 발생합니다.캘린더 수정 이벤트 강제 닫기 문제

int cal_id = getCalendar_ID(); 
if(cal_id != 0){ 
saveCalendarEvent(cal_id); 
} 
private void saveCalendarEvent(int calid){ 
    try{ 
     Calendar cal  = Calendar.getInstance(); 
     ContentValues event = new ContentValues(); 
     long startTime  = cal.getTimeInMillis() + 1000 * 60 * 60; 
     long endTime  = cal.getTimeInMillis() + 1000 * 60 * 60 * 2; 
     event.put("calendar_id", calid); 
     event.put("title", "Event Title"); 
     event.put("description", "Event Desc"); 
     event.put("eventLocation", "Event Location");   
     event.put("dtstart", startTime); 
     event.put("dtend", endTime); 
     event.put("allDay", 0); 
     Uri newEvent  = getContentResolver().insert(Uri.parse("content://com.android.calendar/events"), event); 

     if (newEvent != null) { 
      long id = Long.parseLong(newEvent.getLastPathSegment()); 
      ContentValues values = new ContentValues(); 
      values.put("event_id", id); 
      values.put("method", 1); 
      values.put("minutes", 15); // 15 minuti 
      getContentResolver().insert(Uri.parse("content://com.android.calendar/reminders"), values); 
     } 
    }catch(Exception ee){} 
} 
private int getCalendar_ID() { 
    int calendar_id   = 0; 
    String[] projection  = new String[] { "_id", "name" }; 
    String selection  = "selected=1"; 
    String path    = "calendars"; 
    Cursor calendarCursor = getCalendarCursor(projection, selection, path); 

    if (calendarCursor != null && calendarCursor.moveToFirst()) { 
     int nameColumn  = calendarCursor.getColumnIndex("name"); 
     int idColumn  = calendarCursor.getColumnIndex("_id"); 
     do { 
      String calName = calendarCursor.getString(nameColumn); 
      String calId = calendarCursor.getString(idColumn); 
      if (calName != null /*&& calName.contains("Test")*/) { 
       calendar_id = Integer.parseInt(calId); 
      } 
     } while (calendarCursor.moveToNext()); 
    } 
    return calendar_id; 
} 
private Cursor getCalendarCursor(String[] projection, String selection, String path) { 
    Uri calendars   = Uri.parse("content://calendar/" + path); 
    Cursor cCursor   = null; 
    try { 
     cCursor    = managedQuery(calendars, projection, selection, null, null); 
    } catch (IllegalArgumentException e) {} 
    if (cCursor == null) { 
     calendars   = Uri.parse("content://com.android.calendar/" + path); 
     try { 
      cCursor   = managedQuery(calendars, projection, selection, null, null); 
     } catch (IllegalArgumentException e) {} 
    } 
    return cCursor; 
} 

포스 2.3.7 장치를 사용 닫기 오류 로그

11-23 12:22:39.572: E/AndroidRuntime(2630): Caused by: java.lang.NullPointerException 
11-23 12:22:39.572: E/AndroidRuntime(2630):  at java.util.TimeZone.getTimeZone(TimeZone.java:286) 
11-23 12:22:39.572: E/AndroidRuntime(2630):  at com.android.calendar.TimezoneAdapter.showInitialTimezones(TimezoneAdapter.java:255) 
11-23 12:22:39.572: E/AndroidRuntime(2630):  at com.android.calendar.TimezoneAdapter.<init>(TimezoneAdapter.java:198) 
11-23 12:22:39.572: E/AndroidRuntime(2630):  at com.android.calendar.EditEvent.onCreate(EditEvent.java:707) 
11-23 12:22:39.572: E/AndroidRuntime(2630):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
11-23 12:22:39.572: E/AndroidRuntime(2630):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1612) 
11-23 12:22:39.572: E/AndroidRuntime(2630):  ... 11 more 

. 어떤 도움을 주시면 감사하겠습니다. 감사합니다

답변

1

귀하의 캘린더에는 이벤트 시간대 필드가 있습니다. 그래서 코드 아래 줄을 지나쳐라.

event.put ("eventTimezone", Time.getCurrentTimezone());