Android CalendarContract 的解析器查询?
Android Resolver Query for CalendarContract?
我正在尝试编写一个应用程序来转储日历条目以供参考和备份。首先,我尝试使用下面的代码转储 CalendarContract 的列名,但它总是失败并出现异常:
try {
Cursor cur = Resolver.query(CalendarContract.CONTENT_URI, null, null, null, null);
// print column names...
}
catch( Exception e ) {
Log.i( "MYAPP", "Exception on Resolver.query: "+e); // ALWAYS HAPPENS
return;
}
例外情况是 "javal.lang.IllegalArgumentException:未知 URL content://com.android.calendar".
自动完成显示“CalendarContract.CONTENT_URI”是有效成员。
我还尝试使用类似的查询转储 Contacts 列名称,这很好用:
Cursor cur = Resolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
// print column names
注意:我 运行 使用三星 S9 运行 Andoid V10。
我做错了什么?
这个content_uri不能直接查询,你可能想用CalendarContract.Events.CONTENT_URI
代替。
在此处阅读文档:https://developer.android.com/reference/android/provider/CalendarContract
更具体地说:https://developer.android.com/reference/android/provider/CalendarContract.Events
根据@marmor 的回复,我可以这样查询...
Cursor cur = Resolver.query( CalendarContract.Events.CONTENT_URI );
int ncol = cur.getColumnCount();
for( int indx=0; indx<ncol; indx++ ) {
String colname = cur.getColumnName( indx );
// print indx, colname here
}
在我的设备上,标题是索引 +73,date/time(毫秒)是索引 +47。所以
String title = cur.getString( 73 );
Long msec = cur.getLong( 47 );
我用 'SimpleDataFormat()' 格式化了 'msec' 并打印了数据和标题。例如:
12/31/2021 "New Year's Eve"
etc...
这是我的目标。
我正在尝试编写一个应用程序来转储日历条目以供参考和备份。首先,我尝试使用下面的代码转储 CalendarContract 的列名,但它总是失败并出现异常:
try {
Cursor cur = Resolver.query(CalendarContract.CONTENT_URI, null, null, null, null);
// print column names...
}
catch( Exception e ) {
Log.i( "MYAPP", "Exception on Resolver.query: "+e); // ALWAYS HAPPENS
return;
}
例外情况是 "javal.lang.IllegalArgumentException:未知 URL content://com.android.calendar".
自动完成显示“CalendarContract.CONTENT_URI”是有效成员。
我还尝试使用类似的查询转储 Contacts 列名称,这很好用:
Cursor cur = Resolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
// print column names
注意:我 运行 使用三星 S9 运行 Andoid V10。
我做错了什么?
这个content_uri不能直接查询,你可能想用CalendarContract.Events.CONTENT_URI
代替。
在此处阅读文档:https://developer.android.com/reference/android/provider/CalendarContract
更具体地说:https://developer.android.com/reference/android/provider/CalendarContract.Events
根据@marmor 的回复,我可以这样查询...
Cursor cur = Resolver.query( CalendarContract.Events.CONTENT_URI );
int ncol = cur.getColumnCount();
for( int indx=0; indx<ncol; indx++ ) {
String colname = cur.getColumnName( indx );
// print indx, colname here
}
在我的设备上,标题是索引 +73,date/time(毫秒)是索引 +47。所以
String title = cur.getString( 73 );
Long msec = cur.getLong( 47 );
我用 'SimpleDataFormat()' 格式化了 'msec' 并打印了数据和标题。例如:
12/31/2021 "New Year's Eve"
etc...
这是我的目标。