Android 从日历合同获取与会者详细信息

Android 从日历合同获取与会者详细信息,android,android-contentprovider,android-calendar,Android,Android Contentprovider,Android Calendar,我正在尝试创建一个应用程序,它将从设备上的日历应用程序获取事件和与会者的详细信息 我面临的问题是: 1) 。在许多活动中,标题和与会者不匹配 2) 。在许多活动中,我有0名与会者(主要是即将举行的活动) 这是我的密码:(请告诉我错误) 公共类ReadCalendar{ 静态光标; 公共静态void readCalendar(上下文){ ContentResolver ContentResolver=context.getContentResolver(); //获取与设备同步的所有日历的列表、它

我正在尝试创建一个应用程序,它将从设备上的日历应用程序获取
事件
与会者的详细信息

我面临的问题是:

1) 。在许多活动中,标题和与会者不匹配

2) 。在许多活动中,我有0名与会者(主要是即将举行的活动)

这是我的密码:(请告诉我错误)

公共类ReadCalendar{
静态光标;
公共静态void readCalendar(上下文){
ContentResolver ContentResolver=context.getContentResolver();
//获取与设备同步的所有日历的列表、它们的显示名称以及
cursor=contentResolver.query(Uri.parse(“content://com.android.calendar/calendars"),
(新字符串[]{Calendars.\u ID,Calendars.NAME}),null,null,null);
HashSet CalendarId=新HashSet();
尝试
{
System.out.println(“Count=“+cursor.getCount());
if(cursor.getCount()>0)
{
System.out.println(“控件就在cursor.count循环中”);
while(cursor.moveToNext()){
String _id=cursor.getString(0);
String displayName=cursor.getString(1);
//所选布尔值=!cursor.getString(2).equals(“0”);
System.out.println(“Id:+\u Id+”显示名称:“+displayName”);
calendarID.add(_id);
}
}
}
捕获(断言错误示例)
{
例如printStackTrace();
}
捕获(例外e)
{
e、 printStackTrace();
}
//对于每个日历,显示从上周到下周结束的所有事件。
用于(字符串id:CalendarID){
Uri.Builder=Uri.parse(“content://com.android.calendar/instances/when)。buildon();
//Uri.Builder=Uri.parse(“content://com.android.calendar/calendars)。buildon();
long now=new Date().getTime();
ContentUris.appendId(生成器,现在为-DateUtils.DAY,单位为毫米*10000);
ContentUris.appendId(builder,now+DateUtils.DAY,单位为_MILLIS*10000);
Log.e(“123”,“日历ID-->>>”+ID);
Cursor eventCursor=contentResolver.query(builder.build(),
新字符串[]{Events.TITLE,“begin”,“end”,“allDay”,Events.\u ID,Events.CALENDAR\u ID},Events.CALENDAR\u ID+“=”+ID,
空,“_idasc”);
Log.e(“123”,“eventCursor计数==”+eventCursor.getCount());
if(eventCursor.getCount()>0)
{
if(eventCursor.moveToFirst())
{
做
{
对象mbeg_日期、beg_日期、beg_时间、end_日期、end_时间;
最终字符串标题=eventCursor.getString(0);
最终日期开始=新日期(eventCursor.getLong(1));
最终日期结束=新日期(eventCursor.getLong(2));
最终布尔值全天=!eventCursor.getString(3).equals(“0”);
最终字符串eventId=eventCursor.getString(4);
最终字符串calendarID=eventCursor.getString(5);
Log.e(“123”,“事件Id------>>>>”+eventId+“--------------calendarId------>>>”+calendarId);
/*System.out.println(“标题:“+Title+”开始:“+Begin+”结束:”+End+
“全天:”+全天);
*/  
日志e(“123”,“标题:”+标题);
Log.e(“123”,“开始:”+开始);
日志e(“123”,“结束:+End”);
Log.e(“123”,“全天:+全天”);
//与会者代码
Cursor EventAttendeeSursor=contentResolver.query(CalendarContract.Attendees.CONTENT_URI,新字符串[]{Attendees.ATTENDEE_NAME,Attendes.EVENT_ID},Attendes.EVENT_ID+“=”+eventId,null,null);
Log.e(“123”,“出席人数计数------”+eventAttendeeSursor.getCount());
如果(EventAttendeeSursor.getCount()>0)
{
if(eventAttendeeSursor.moveToFirst())
{
做{
//Log.e(“123”,“与会者姓名-->>>”+EventAttendeeSursor.getString(0));
Log.e(“123”,“与会者事件ID-->>”+EventAttendeeSoursor.getString(1));
}while(eventAttendeeSursor.moveToNext());
}
}
}
while(eventCursor.moveToNext());
}
}
打破
}
}
}

我没有详细查看您的代码,但我遇到了相同的问题-这是因为实例id和事件id之间的混淆。我确实看到您的uri(生成器)是基于实例的,但您需要的字段是event.id:它们是不同的

重要的是,Attenders表基于事件id,而不是实例id,因此它可能会解释您的问题。 将所有内容按顺序、一致地排列(即,根据URI从实例表中提取事件id,并将其传递给Attendes表。查看这是否有帮助

public class ReadCalendar {
static Cursor cursor;

public static void readCalendar(Context context) {

ContentResolver contentResolver = context.getContentResolver();

// Fetch a list of all calendars synced with the device, their display names and whether the

cursor = contentResolver.query(Uri.parse("content://com.android.calendar/calendars"),
            (new String[] { Calendars._ID, Calendars.NAME}), null, null, null);

HashSet<String> calendarIds = new HashSet<String>();

try
{
    System.out.println("Count="+cursor.getCount());
    if(cursor.getCount() > 0)
    {
        System.out.println("the control is just inside of the cursor.count loop");
    while (cursor.moveToNext()) {

         String _id = cursor.getString(0);
         String displayName = cursor.getString(1);
         //Boolean selected = !cursor.getString(2).equals("0");

        System.out.println("Id: " + _id + " Display Name: " + displayName);
        calendarIds.add(_id);
    }
}
}
catch(AssertionError ex)
{
    ex.printStackTrace();
}
catch(Exception e)
{
    e.printStackTrace();
}


// For each calendar, display all the events from the previous week to the end of next week.        
for (String id : calendarIds) {
    Uri.Builder builder = Uri.parse("content://com.android.calendar/instances/when").buildUpon();
    //Uri.Builder builder = Uri.parse("content://com.android.calendar/calendars").buildUpon();
    long now = new Date().getTime();

    ContentUris.appendId(builder, now - DateUtils.DAY_IN_MILLIS * 10000);
    ContentUris.appendId(builder, now + DateUtils.DAY_IN_MILLIS * 10000);

    Log.e("123", "Calender ID---->>>>>>"+id);
Cursor eventCursor = contentResolver.query(builder.build(),
            new String[]  { Events.TITLE, "begin", "end", "allDay", Events._ID, Events.CALENDAR_ID}, Events.CALENDAR_ID+"=" + id,
            null, "_id ASC");

    Log.e("123","eventCursor count====="+eventCursor.getCount());
    if(eventCursor.getCount()>0)
    {

        if(eventCursor.moveToFirst())
        {
            do
            {
                Object mbeg_date,beg_date,beg_time,end_date,end_time;

                final String title = eventCursor.getString(0);
                final Date begin = new Date(eventCursor.getLong(1));
                final Date end = new Date(eventCursor.getLong(2));
                final Boolean allDay = !eventCursor.getString(3).equals("0");
                final String eventId = eventCursor.getString(4);
                final String calendarID = eventCursor.getString(5);

                Log.e("123", "Event Id----->>>>>"+eventId+"---------calendarId----->>>"+calendarID);

        /*  System.out.println("Title: " + title + " Begin: " + begin + " End: " + end +
                    " All Day: " + allDay);
        */  
                Log.e("123","Title:"+title);
                Log.e("123","Begin:"+begin);
                Log.e("123","End:"+end);
                Log.e("123","All Day:"+allDay);

             // Attendees Code
                Cursor eventAttendeesCoursor = contentResolver.query(CalendarContract.Attendees.CONTENT_URI, new String []{ Attendees.ATTENDEE_NAME, Attendees.EVENT_ID}, Attendees.EVENT_ID +" = " + eventId, null, null);
                Log.e("123", "Count of no of attendees-----"+eventAttendeesCoursor.getCount());
                if(eventAttendeesCoursor.getCount()>0)
                {

                    if(eventAttendeesCoursor.moveToFirst())
                    {
                        do {
//                              Log.e("123", "Attendees Name---->>>"+ eventAttendeesCoursor.getString(0));
                            Log.e("123", "Attendees Event ID---->>>"+ eventAttendeesCoursor.getString(1));
                        } while(eventAttendeesCoursor.moveToNext());
                    }
                }

            }
            while(eventCursor.moveToNext());
        }
    }
    break;
}
}
}