ContactsContract.RawContacts.SYNC2在实际设备上始终为null,在SDK模拟器上正常工作

时间:2012-01-08 19:32:47

标签: android-emulator android android-syncadapter

我正在编写基于Sam Steele's demo的SyncProvider。

然而,我遇到了一个重大问题。我将时间戳写入ContactsContract.RawContacts.SYNC2字段。在SDK模拟器上,这很好用。然而,在我的Galaxy Nexus上,它没有...有谁知道为什么或如何解决这个问题?

这是我的代码:

编写时间戳:

builder = ContentProviderOperation.newUpdate(ContactsContract.RawContacts.CONTENT_URI);
builder.withSelection(ContactsContract.RawContacts.CONTACT_ID + " = '" + rawContactId + "'", null);
builder.withValue(ContactsContract.RawContacts.SYNC2, String.valueOf(timestamp));
operationList.add(builder.build());
mContentResolver.applyBatch(ContactsContract.AUTHORITY, operationList);

读出来:

    Uri rawContactUri = RawContacts.CONTENT_URI.buildUpon()
            .appendQueryParameter(RawContacts.ACCOUNT_NAME, account.name)
            .appendQueryParameter(RawContacts.ACCOUNT_TYPE, account.type)
            .build();
    mContentResolver = context.getContentResolver();
    Cursor c1 = mContentResolver.query(rawContactUri, new String[] { BaseColumns._ID, UsernameColumn, ContactsContract.RawContacts.SYNC2 }, null, null, null);
    while (c1.moveToNext()) {
        SyncEntry entry = new SyncEntry();
        entry.raw_id = c1.getLong(c1.getColumnIndex(BaseColumns._ID));
        long oldTimestamp = -1;
        if (!c1.isNull(c1.getColumnIndex(ContactsContract.RawContacts.SYNC2))){
            oldTimestamp = Long.valueOf(c1.getString(c1.getColumnIndex(ContactsContract.RawContacts.SYNC2)));
            Log.i("READ TIMESTAMP", String.valueOf(oldTimestamp));
        }
        entry.photo_timestamp = oldTimestamp;
        localContacts.put(c1.getString(1), entry);
    }
    c1.close();

出于某种原因,在Galaxy Nexus上c1.isNull似乎总是如此。我做错了什么?

更新:显然,有时会为一些联系人(1-5个> 100)编写,所以我现在更加困惑了..

更新:我已经检查过ContactProvider SQL数据库,而且sync2字段确实是空的,所以这似乎是我写时间戳的问题。

0 个答案:

没有答案