恩,我知道的,可是这样的话。00:00取不到值~~~
中间会不会有遗漏呢?麻烦了
private synchronized void initLoaderData(Calendar cal, int datePosition) {
// TODO Auto-generated method stub
// initialize information data in the day(datePosition & cal)
ArrayList<ArrayList<Map<String, Object>>> children = new ArrayList<ArrayList<Map<String, Object>>>();
ArrayList<Map<String, Object>> groupdata = new ArrayList<Map<String, Object>>();
cal.setLenient(true);
imgHeight = 0;
int eventCount = 0;
int callCount = 0;
int msCount = 0;
int photoCount = 0;
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH);
int day = cal.get(Calendar.DATE);
long curMilliTime = cal.getTimeInMillis();
Cursor cur = CR.query(CONTENT_URI, local_projection, "EvTime > ?",
new String[] { String.valueOf(curMilliTime) }, "EvTime"
+ " ASC");
long tim = 0;
boolean init = cur.moveToFirst();
if (init)
tim = cur.getLong(0);
Map<String, Object> gdata = new HashMap<String, Object>();
String mText = String.valueOf(day + "  " + monthsCollection[month]
+ " " + year);
gdata.put("HOUR", curMilliTime + ONE_HOUR);
gdata.put("STRING", mText);
Log.i("5", "5");
Map<String, Object> chiMap = createMap(0, "--", null, 0, -1, 0);
ArrayList<Map<String, Object>> chi = new ArrayList<Map<String, Object>>();
chi.add(chiMap);
chi.add(chiMap);
groupdata.add(0, gdata);
children.add(chi); int hour = -1;
ArrayList<Map<String, Object>> currentchild = chi; while (((tim < curMilliTime + DAY_MILLISECOND) || (tim == curMilliTime
+ DAY_MILLISECOND))
&& !cur.isAfterLast() && init) { int image = cur.getInt(1);
String content = cur.getString(2);
int flag = cur.getInt(3);
String name = cur.getString(4);
long id = cur.getLong(5);
int mCalltype = cur.getInt(6);
boolean bn_Status = mBnState[flag - 1]; if (flag == 1)
eventCount++;
else if (flag == 2)
callCount++;
else if (flag == 3)
msCount++;
else if (flag == 5)
photoCount++; if (bn_Status) {

Map<String, Object> chMap; int nowhour = (int) ((tim - curMilliTime) / ONE_HOUR);
Log.i("hour", "hour" + hour);
Log.i("nowhour", "nowhour" + nowhour);
if (nowhour == 0) {
chMap = createMap(image, content, name, flag, id, mCalltype);
chi.add(chMap);// add event's data
hour = 0;
currentchild = chi;
Log.i("1", "1===" + hour);
} else if (nowhour == hour) {
chMap = createMap(image, content, name, flag, id, mCalltype);
currentchild.add(chMap);// add event's data
Log.i("2", "2===" + hour);
} else {
if ((nowhour != hour + 1) && (hour + 1 != 0)) {
// add hour text
Map<String, Object> gdata1 = new HashMap<String, Object>();
gdata1
.put("HOUR", curMilliTime + (hour + 1)
* ONE_HOUR);
gdata1.put("STRING", String.valueOf(hour + 1) + ":00");
groupdata.add(gdata1);
ArrayList<Map<String, Object>> child = new ArrayList<Map<String, Object>>();
Map<String, Object> chiMap1 = createMap(0, "--", null,
0, -1, 0);
child.add(chiMap1);
child.add(chiMap1);
children.add(child);
Log.i("3", "3===" + hour);
} else if (nowhour == 24) {
// add hour text
nowhour = nowhour - 24;
Map<String, Object> gdata2 = new HashMap<String, Object>();
gdata2.put("HOUR", curMilliTime + nowhour * ONE_HOUR);
gdata2.put("STRING", String.valueOf(nowhour) + ":00");
groupdata.add(gdata2);
ArrayList<Map<String, Object>> newchild = new ArrayList<Map<String, Object>>();
Map<String, Object> cMap = createMap(image, content,
name, flag, id, mCalltype);
newchild.add(cMap);// add event's data
children.add(newchild);
currentchild = newchild;
hour = nowhour;
Log.i("224", "224===" + hour);
}
// add hour text
Map<String, Object> gdata2 = new HashMap<String, Object>();
gdata2.put("HOUR", curMilliTime + nowhour * ONE_HOUR);
gdata2.put("STRING", String.valueOf(nowhour) + ":00");
groupdata.add(gdata2);
ArrayList<Map<String, Object>> newchild = new ArrayList<Map<String, Object>>();
Map<String, Object> cMap = createMap(image, content, name,
flag, id, mCalltype);
newchild.add(cMap);// add event's data
children.add(newchild);
currentchild = newchild;
hour = nowhour;
Log.i("4", "4===" + hour);
}
}
// iterate extra image height
if (flag == 5)
imgHeight = imgHeight + 28;// BMP height 60 row 36 if (cur.moveToNext())
tim = cur.getLong(0);
}
if ((hour + 1 != 0) && (hour + 1 != 25)) {
ArrayList<Map<String, Object>> childi = new ArrayList<Map<String, Object>>();
Map<String, Object> chiMap2 = createMap(0, "--", null, 0, -1, 0);
childi.add(chiMap2);
children.add(childi);
Map<String, Object> gdata3 = new HashMap<String, Object>();
gdata3.put("HOUR", curMilliTime + (hour + 1) * ONE_HOUR);
gdata3.put("STRING", String.valueOf(hour + 1) + ":00");
groupdata.add(gdata3);
Log.i("6", "6===" + hour);
}/*
 * else if(hour+1==0&&(hour+1==25)){ ArrayList<Map<String, Object>>
 * childi = new ArrayList<Map<String, Object>>(); Map<String, Object>
 * chiMap2 = createMap(0, "--", null, 0, -1, 0); childi.add(chiMap2);
 * children.add(childi); Map<String, Object> gdata3 = new
 * HashMap<String, Object>(); gdata3.put("HOUR", curMilliTime + (hour +
 * 1) * ONE_HOUR); gdata3.put("STRING", String.valueOf(hour + 1) +
 * ":00"); groupdata.add(gdata3); }
 */ Map<String, Object> accu = countMap(imgHeight, eventCount, callCount,
msCount, photoCount);
accumulator.put(datePosition, accu);
groups.put(datePosition, groupdata);
childdata.put(datePosition, children);
cur.close(); }

解决方案 »

  1.   

     while (((tim < curMilliTime + DAY_MILLISECOND)&& !cur.isAfterLast() && init) 
    但是它获取的是01:00--23:59分,24:00根本无法获取。。
    但是如果加上(tim == curMilliTime
                    + DAY_MILLISECOND)的判断条件,00:00的事件可以被获取
    但是 如果是3月3号的00:00--1:00之间的事件,它会显示到3月2号的24点--25点之间
      

  2.   

    tim = cur.getLong(0);
    这个获取的是什么类型的?long型的小时?你应该获取包括分秒的时间判断吧
      

  3.   

        那样的话,怎么比较呢?tim < curMilliTime + DAY_MILLISECOND tim是以秒为单位,curMilliTime和MILLISECOND都是毫秒单位的?
      

  4.   

    想知道calendar里面添加某一天的events怎么对应到该天的呢?
    具体是怎么一个机制呢?望解答~~
      

  5.   

    下载 calender 源码 看看