如何在 android 中使用 ContactsContract.Contacts.CONTACT_LAST_UPDATED_TIMESTAMP?

how to use ContactsContract.Contacts.CONTACT_LAST_UPDATED_TIMESTAMP in android?

我在写如何在android中使用ContactsContract.Contacts.CONTACT_LAST_UPDATED_TIMESTAMP?

下面是我的代码,它显示了 IllegalStateException。

    Cursor allContacts = this.getContentResolver().query(
            ContactsContract.RawContacts.CONTENT_URI, null, null, null, null);

    StringBuilder sbCurrentVersion = new StringBuilder();
    allContacts.moveToFirst();

    for (int i = 0; i < allContacts.getCount(); i++) {
        String id = allContacts.getString(allContacts.getColumnIndex(ContactsContract.Contacts._ID));
        String name = allContacts.getString(allContacts.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
        String col = allContacts.getString(allContacts.getColumnIndex(ContactsContract.Contacts.CONTACT_LAST_UPDATED_TIMESTAMP));
        sbCurrentVersion.append("  "+id+":"+name+" : "+col);
        allContacts.moveToNext();
    }

         It shows following IllegalStateException
                                                                 java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it.
                                                                                    at android.database.CursorWindow.nativeGetString(Native Method)
                                                                                    at android.database.CursorWindow.getString(CursorWindow.java:438)
                                                                                    at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:51)
                                                                                    at android.database.CursorWrapper.getString(CursorWrapper.java:137)
                                                                                    at com.example.dj.contentobserverdemo.ContentObserverService.sGetCurrentContatcsVersions(ContentObserverService.java:111)
                                                                                    at com.example.dj.contentobserverdemo.ContentObserverService.access[=12=]0(ContentObserverService.java:23)
                                                                                    at com.example.dj.contentobserverdemo.ContentObserverService$MyContentObserver.onChange(ContentObserverService.java:83)
                                                                                    at android.database.ContentObserver.onChange(ContentObserver.java:130)
                                                                                    at android.database.ContentObserver.onChange(ContentObserver.java:145)
                                                                                    at android.database.ContentObserver$NotificationRunnable.run(ContentObserver.java:216)
                                                                                    at android.os.Handler.handleCallback(Handler.java:739)
                                                                                    at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                                    at android.os.Looper.loop(Looper.java:148)
                                                                                    at android.os.HandlerThread.run(HandlerThread.java:61)

我得到了为什么显示 IllegalStateException 的答案。使用 ContactsContract.Contacts.CONTENT_URI 而不是 ContactsContract.RawContacts.CONTENT_URI 来获取所有联系人

Cursor allContacts = this.getContentResolver().query(
        ContactsContract.Contacts.CONTENT_URI, null, null, null, null);

StringBuilder sbCurrentVersion = new StringBuilder();
allContacts.moveToFirst();

for (int i = 0; i < allContacts.getCount(); i++) {
    String id = allContacts.getString(allContacts.getColumnIndex(ContactsContract.Contacts._ID));
    String name = allContacts.getString(allContacts.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
    String col = allContacts.getString(allContacts.getColumnIndex(ContactsContract.Contacts.CONTACT_LAST_UPDATED_TIMESTAMP));
    sbCurrentVersion.append("  "+id+":"+name+" : "+col);
    allContacts.moveToNext();
}