gpt4 book ai didi

Android Calendar Content Provider : allDay is true but sec, 分、时不为0

转载 作者:行者123 更新时间:2023-11-29 15:19:14 25 4
gpt4 key购买 nike

我正在向内容提供者查询约会。

    Uri.Builder builder = CalendarContract.Instances.CONTENT_URI.buildUpon();
ContentUris.appendId(builder, startMillis);
ContentUris.appendId(builder, endMillis);
Uri uri = builder.build();

String[] event_projection= new String[] {
Instances.TITLE,
Instances.ALL_DAY,
Instances.CALENDAR_COLOR,
Instances.EVENT_ID,
Instances.BEGIN,
Instances.END,
};

String selection = CalendarContract.Instances.VISIBLE + "='1'";

String sortBy = CalendarContract.Instances.BEGIN + " ASC, " +
CalendarContract.Instances.TITLE + " ASC";

Cursor mCursor = cr.query(uri, event_projection, selection, null, sortBy);

一些用户发送了以下崩溃报告:

java.lang.IllegalArgumentException: allDay is true but sec, min, hour are not 0.
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:167)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:137)
at android.content.ContentProviderProxy.query(ContentProviderNative.java:384)
at android.content.ContentResolver.query(ContentResolver.java:372)
at android.content.ContentResolver.query(ContentResolver.java:315)

这主要发生在 Sony Xperia 设备上,但也发生在 Google Nexus10 上。怎么可能在查询数据的时候得到这个异常呢?一开始插入数据时不应该避免这种情况吗?

这是否意味着我必须用 try/catch 包围查询?这不会减慢查询速度吗?

最佳答案

是的,听起来确实数据插入不当。如果它简化了查询处理,异常实际上可以加快查询速度,但不会返回您要查找的数据。

异常似乎来自 Time.compare http://developer.android.com/reference/android/text/format/Time.html#compare(android.text.format.Time,%20android.text.format.Time)

这可能是由查询的 sortBy 参数引起的。用 null 试试看它是否停止使用比较器。如果可行,那么当 ALL_DAY 为真时,它可能与数据集上的 BEGIN 排序不兼容。

您可以在从游标读取行并更新内存中的值以使比较器满意或使用您自己的比较器后对集合进行排序,或者您可以修复数据(将秒、分钟、小时设置为 0,其中ALL_DAY 为真),然后再运行查询。

也许一个好的做法是在出现异常时修复数据并重试。

关于Android Calendar Content Provider : allDay is true but sec, 分、时不为0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20346639/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com