Wie man Kontakte in der Reihenfolge Ihrer kommenden Geburtstage?
Ich habe code zu Lesen, den Kontaktdaten und zum Lesen Geburtstage. Aber wie bekomme ich eine Liste von Kontakten in der Reihenfolge Ihrer bevorstehenden Geburtstag?
Für einen einzelnen Kontakt identifiziert id
, bekomme ich die details und den Geburtstag so:
Cursor c = null;
try {
Uri uri = ContentUris.withAppendedId(
ContactsContract.Contacts.CONTENT_URI, id);
c = ctx.getContentResolver().query(uri, null, null, null, null);
if (c != null) {
if (c.moveToFirst()) {
DatabaseUtils.cursorRowToContentValues(c, data);
}
}
c.close();
//read birthday
c = ctx.getContentResolver()
.query(
Data.CONTENT_URI,
new String[] { Event.DATA },
Data.CONTACT_ID + "=" + id + " AND "
+ Data.MIMETYPE + "= '"
+ Event.CONTENT_ITEM_TYPE + "' AND "
+ Event.TYPE + "=" + Event.TYPE_BIRTHDAY,
null, Data.DISPLAY_NAME);
if (c != null) {
try {
if (c.moveToFirst()) {
this.setBirthday(c.getString(0));
}
} finally {
c.close();
}
}
return super.load(id);
} catch (Exception e) {
Log.v(TAG(), e.getMessage(), e);
e.printStackTrace();
return false;
} finally {
if (c != null)
c.close();
}
und den code Lesen Sie alle Kontakte:
public Cursor getList() {
//Get the base URI for the People table in the Contacts content
//provider.
Uri contacts = ContactsContract.Contacts.CONTENT_URI;
//Make the query.
ContentResolver cr = ctx.getContentResolver();
//Form an array specifying which columns to return.
String[] projection = new String[] { ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME };
Cursor managedCursor = cr.query(contacts, projection, null, null,
ContactsContract.Contacts.DISPLAY_NAME
+ " COLLATE LOCALIZED ASC");
return managedCursor;
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich Tat dies, der andere Weg - eine Auswahl, die direkt auf die Daten-Tabelle, die speichert Geburtstag.
}
SELECT ist zweimal angerufen - ein Anruf von heute auf 12/31 und zweiten Anruf von 01/01 bis heute. Ich beschränke zurückgegebenen Zeilen 10 aber dies ist nicht erforderlichen.
EDIT: fand ich, dass das nicht funktionieren auf allen Android-Handys wie Geburtstag Termine gespeichert sind, in vielen verschiedenen format. So lädst du alle Geburtstage (ungeordnete), analysieren und Sortieren im Speicher. #Fail
Ich denke, ich würde die Liste, sortiert nach dem Geburtstag, dann kopieren Sie diese Liste in eine zweite Liste mit dem heutigen Datum als "null-Datum". Scheint, wie es wäre sauberer sein es so zu tun, als zu versuchen, den hammer einer entsprechenden Abfrage, obwohl es vielleicht einen Hauch langsamer.
Landete ich mit dieser Lösung
so, in der final landete ich mit einer Cursor mit Kontakten-id, der Anzeigename und der Geburtstag aus der Datenbank in der Reihenfolge wollte ich
Vielleicht, Sie wollen ein CursorJoiner wie in der folgenden Antwort:
http://www.mail-archive.com/[email protected]/msg44317.html
Habe ich ein ähnliches Problem habe ich noch nicht gelüftet, also ich würde gerne wissen, ob man diese arbeiten.
Ändern der sort-parameter in den Aufruf von query() in getList(). Derzeit ist es eingestellt DISPLAY_NAME. Versuchen TYPE_BIRTHDAY.