java - 从 Android 上的日历提供程序中删除事件

标签 java android events android-calendar

我有一个使用 Calendar Provider 来添加、编辑和删除事件的应用程序。我有一个日历界面,它显示哪些日期附加了事件。添加事件非常有效。为了添加事件,我将 calendarID 硬编码为数字 3,因此 calID = 3。

long calID=3;
values.put(Events.DESCRIPTION, description);
    values.put(Events.CALENDAR_ID, calID);
    values.put(Events.EVENT_TIMEZONE, "Europe/London");
    Uri uri = cr.insert(Events.CONTENT_URI, values);

这非常有效。我编程的 View 显示了事件。我打开手机 (Xperia J) 附带的日历应用程序,我可以看到那里有 Activity 。

我尝试使用以下代码删除事件:

        ContentResolver cr = mContext.getContentResolver();
    ContentValues values = new ContentValues();
    Uri deleteUri = null;
    deleteUri = ContentUris.withAppendedId(Events.CONTENT_URI, eventID);
    int rows = mContext.getContentResolver().delete(deleteUri, null, null);

此代码直接从 developer.android.com 网站复制而来。 这不删除!我调试了代码,'rows' 的值等于 1,所以实际上应该删除该行。 但是我回到我的应用程序,事件仍然存在。有趣的事情:我已经检查了手机中的日历应用程序,但那里不存在该事件。所以它已被删除(?)。我想也许我没有刷新我的应用程序,所以我关闭它,重新安装它,它永远不会删除。我再次调试删除代码,对于同一个事件,“行”值再次等于 1!所以,每次我想删除它时,“行”总是返回 1。所以该行被删除了,但它并没有被删除。

这里发生了什么?是因为我在添加事件时硬编码了 calendarID 吗?

最佳答案

正如您所注意到的,在事件同步到服务器之前,删除事件并不会真正从数据库中删除该行。 这是非常合乎逻辑的,否则日历同步适配器将无法检索事件数据以向服务器发送 DELETE 请求。这就是为什么在事件表中有一个 DELETED 列,您必须在查询事件时检查它:

http://developer.android.com/reference/android/provider/CalendarContract.SyncColumns.html#DELETED

顺便说一句,如果您查询实例而不是事件(它会扩展重复发生的事件),删除的事件会自动从结果中删除。

关于java - 从 Android 上的日历提供程序中删除事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18774394/

相关文章:

asp.net - 为什么 WebControl 事件的前缀为 "On"?

javascript - VueJS 2 : Catch event of direct child component

java - JPA实体字段中多维数组的正确注释是什么

java - LDAP/AD - 如何确定用户名或密码是否不匹配

android - ACRA 在 CrashReports.csv 文件中不显示任何内容

java.lang.IllegalStateException : Fragment not attached to a context after API response

swift - 如何拦截 swift iOS 应用程序的关键事件?

没有桌面环境的java gui

java - 列删除会增加 Cassandra 中的读取延迟吗?

android - Android 7.0 不支持通话录音问题?