如何处理PIM.Event
以下代码用于实现PIM Event的增加、删除,修改,它的增加、删除功能我的P990上工作得很好,但修改功能会导致异常退出,而在k750上无论增加、修改、删除都没有效果(虽然也会引发安全性提问)。
这段代码我花精力最多的是重复部分,主要是没有注意它的常量与Calandar的常量表示并不相同。
至于修改的异常问题和k750上没效果,哪位仁兄可以给分析一下呢?
// 更新事务提醒public boolean updatePIMEvent(){EventList events = null;try {Resource.appendLog("Start updatePIMEvent", Resource.MESSAGE_LOG);// 打开事务列表events = (EventList)PIM.getInstance().openPIMList(PIM.EVENT_LIST, PIM.READ_WRITE);// 根据情况进行不同处理if(rpUID == null){if(repeatID == -2){Resource.appendLog("pre call appendEvent", Resource.MESSAGE_LOG);return appendEvent(events); // 增加}}else {if(repeatID == -2){Resource.appendLog("pre call updateEvent", Resource.MESSAGE_LOG);return updateEvent(events); // 更新}else{Resource.appendLog("pre call removeEvent", Resource.MESSAGE_LOG);return removeEvent(events); // 移除}}Resource.appendLog("error updatePIMEvent", Resource.ERROR_LOG);return false;} catch (Exception e){//e.printStackTrace();return false;}finally{if(events != null){try {events.close();} catch (Exception e){//e.printStackTrace();}}}}// 创建事务提醒private boolean appendEvent(EventList events) throws PIMException {Event event = events.createEvent();// 开始日期+响铃时间if(events.isSupportedField(Event.START)){event.addDate(Event.START, PIMItem.ATTR_NONE, rpStartDate + DateUtil.rawOffset);}// 结束日期if(events.isSupportedField(Event.END)){event.addDate(Event.END, PIMItem.ATTR_NONE, rpStartDate);}// 提醒摘要if(events.isSupportedField(Event.SUMMARY)){event.addString(Event.SUMMARY, PIMItem.ATTR_NONE, rpNotes == null ? "" : rpNotes);}// 提醒备注if(events.isSupportedField(Event.NOTE)){event.addString(Event.NOTE, PIMItem.ATTR_NONE, summarize == null ? "" : summarize);}// 提前响铃时间if (events.isSupportedField(Event.ALARM)) {event.addInt(Event.ALARM, PIMItem.ATTR_NONE, 300);}//event.setRepeat(getRepeatRule());setRepeatRule(event);// 提交事务提醒event.commit();// 保存事务提醒IDrpUID = event.getString(Event.UID, 0);Resource.appendLog("Append ok UID: " + rpUID, Resource.MESSAGE_LOG);return true;}// 更新事务提醒private boolean updateEvent(EventList events) throws PIMException {Event event = seekEvent(events);if(event != null){ // 执行更新// 开始日期+响铃时间if(events.isSupportedField(Event.START)){event.setDate(Event.START, 0, PIMItem.ATTR_NONE, rpStartDate + DateUtil.rawOffset);}// 结束日期if(events.isSupportedField(Event.END)){event.setDate(Event.END, 0, PIMItem.ATTR_NONE, rpStartDate);}// 提醒摘要if(events.isSupportedField(Event.SUMMARY)){event.setString(Event.SUMMARY, 0, PIMItem.ATTR_NONE, rpNotes == null ? "" : rpNotes + " - old");}// 提醒备注if(events.isSupportedField(Event.NOTE)){event.setString(Event.NOTE, 0, PIMItem.ATTR_NONE, summarize == null ? "" : summarize);}// 提前响铃时间if (events.isSupportedField(Event.ALARM)) {event.setInt(Event.ALARM, 0, PIMItem.ATTR_NONE, 300);}//event.setRepeat(null);//event.setRepeat(getRepeatRule());setRepeatRule(event);// 提交事务提醒event.commit();Resource.appendLog("Update ok UID: " + rpUID, Resource.MESSAGE_LOG);}else{ // 找不到旧记录则增加return appendEvent(events);}return false;}// 移除事务提醒private boolean removeEvent(EventList events) throws PIMException {Event event = seekEvent(events);if(event != null){ // 执行删除event.setRepeat(null);event.commit();events.removeEvent(event);Resource.appendLog("Remove ok UID:" + rpUID, Resource.MESSAGE_LOG);rpUID = null;return true;}return false;}// 查找事务提醒private Event seekEvent(EventList events) throws PIMException {// 枚举指定开始时间的事务提醒//Enumeration items = events.items(EventList.STARTING, rpStartDate, 0, true);Resource.appendLog("start seeking items", Resource.MESSAGE_LOG);Enumeration items = events.items();if(items != null && items.hasMoreElements()){Resource.appendLog("items read ok", Resource.MESSAGE_LOG);}// 从中查找对应标识的事务提醒并返回Event event = null;while(items.hasMoreElements()){event = (Event)items.nextElement();if(rpUID.equals(event.getString(Event.UID, 0))){Resource.appendLog("retrieve event ok", Resource.MESSAGE_LOG);return event;}}Resource.appendLog("retrieve event fail", Resource.MESSAGE_LOG);return null;}//private RepeatRule getRepeatRule(){//// 重复规则//RepeatRule rpRule = new RepeatRule();////Calendar calendar = Calendar.getInstance();//calendar.setTime(new Date(rpStartDate));//// 重复类型//rpRule.setInt(RepeatRule.FREQUENCY, RepeatRule.DAILY + rpType);//switch(rpType){//case 0: // 每日提醒//break;//case 1: // 每周某天提醒//rpRule.setInt(RepeatRule.DAY_IN_WEEK, 0x20000 >> calendar.get(Calendar.DAY_OF_WEEK));//break;//case 2: // 每月某天提醒//rpRule.setInt(RepeatRule.DAY_IN_MONTH, calendar.get(Calendar.DAY_OF_MONTH));//break;//case 3: // 每年某天提醒//rpRule.setInt(RepeatRule.MONTH_IN_YEAR, 0x10000 << calendar.get(Calendar.MONTH));//rpRule.setInt(RepeatRule.DAY_IN_MONTH, calendar.get(Calendar.DAY_OF_MONTH));//break;//}////// 重复频率//rpRule.setInt(RepeatRule.INTERVAL, rpInterval);//// 结束日期//rpRule.setDate(RepeatRule.END, DateUtil.dayToDate(rpEndDay).getTime());////return rpRule;//}private void setRepeatRule(Event event){// 重复规则RepeatRule rpRule = event.getRepeat();if(rpRule == null){rpRule = new RepeatRule();}Calendar calendar = Calendar.getInstance();calendar.setTime(new Date(rpStartDate));// 重复类型rpRule.setInt(RepeatRule.FREQUENCY, RepeatRule.DAILY + rpType);switch(rpType){case 0: // 每日提醒break;case 1: // 每周某天提醒rpRule.setInt(RepeatRule.DAY_IN_WEEK, 0x20000 >> calendar.get(Calendar.DAY_OF_WEEK));break;case 2: // 每月某天提醒rpRule.setInt(RepeatRule.DAY_IN_MONTH, calendar.get(Calendar.DAY_OF_MONTH));break;case 3: // 每年某天提醒rpRule.setInt(RepeatRule.MONTH_IN_YEAR, 0x10000 << calendar.get(Calendar.MONTH));rpRule.setInt(RepeatRule.DAY_IN_MONTH, calendar.get(Calendar.DAY_OF_MONTH));break;}// 重复频率rpRule.setInt(RepeatRule.INTERVAL, rpInterval);// 结束日期rpRule.setDate(RepeatRule.END, DateUtil.dayToDate(rpEndDay).getTime());event.setRepeat(rpRule);}