如何按即将到来的生日顺序获取联系人?

如何按即将到来的生日顺序获取联系人?,第1张

如何按即将到来的生日顺序获取联系人?

我以相反的方式进行了此 *** 作-直接选择存储生日的数据表。

private static final int UPCOMING_COUNT = 10;public static List<BContact> upcomingBirthday(Context ctx) {    String today = new SimpleDateFormat("MM-dd").format(new Date()); List<BContact> firstPart = upcomingBirthday(ctx, today, "12-31", UPCOMING_COUNT);    if (firstPart.size() < UPCOMING_COUNT) {        firstPart.addAll(upcomingBirthday(ctx, "01-01", today, UPCOMING_COUNT - firstPart.size()));    }    return firstPart;}public static List<BContact> upcomingBirthday(Context ctx, String fromDate, String toDate, int rows) {  Uri dataUri = ContactsContract.Data.CONTENT_URI;  String[] projection = new String[] { ContactsContract.Contacts.DISPLAY_NAME,    ContactsContract.CommonDataKinds.Event.CONTACT_ID, ContactsContract.CommonDataKinds.Event.START_DATE };  Cursor c = ctx.getContentResolver().query(       dataUri,       projection,        ContactsContract.Data.MIMETYPE + "= ? AND " +        ContactsContract.CommonDataKinds.Event.TYPE + "=" + ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY +        " AND substr(" + ContactsContract.CommonDataKinds.Event.START_DATE + ",6) >= ?" +        " AND substr(" + ContactsContract.CommonDataKinds.Event.START_DATE + ",6) <= ?" ,       new String[] {ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE, fromDate, toDate},        "substr("+ ContactsContract.CommonDataKinds.Event.START_DATE +",6)");  List<BContact> result = new ArrayList<BContact>();  int i=0;  while (c.moveTonext() && i<rows) {      result.add(new BContact(c.getString(0), c.getString(1), c.getString(2)));      i++;  }  c.close();  return result;

}

SELECT被两次调用-从今天到12/31的一次呼叫,从01/01到今天的第二次呼叫。我限制返回的行数为10,但这不是必需的。

编辑:
我发现这不适用于所有Android手机,因为生日日期以许多不同的格式存储。因此,您必须加载所有生日(无序),对其进行解析并在内存中进行排序。#失败



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5561170.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存