Cursor cursor = resolver.query(
Data.CONTENT_URI,
DataQuery.PROJECTION,
DataQuery.SELECTION,
new String[] {String.valueOf(rawContactId)},
null);
С PROJECTION:
public static final String[] PROJECTION = new String[] {
Data._ID,
Data.MIMETYPE,
Data.DATA1,
Data.DATA2,
Data.DATA3};
и SELECTION:
public static final String SELECTION = Data.RAW_CONTACT_ID + "=?";
rawcontactId возвращает значения, я сделал записи впроверять.Чтобы придать этому некоторый контекст, я работаю с учетной записью синхронизации.Цель состоит в том, чтобы найти столбцы данных для существующих контактов и записать поверх них любые новые данные.Я работаю со следующим примером кода, предоставленным Android: http://developer.android.com/resources/samples/SampleSyncAdapter/src/com/example/android/samplesync/platform/ContactManager.html
Чтобы подвести итог моей проблемы, у меня есть два контакта через эту синхронизированную учетную запись, которые добавляются без проблем, но не могут быть обновлены,Кто-нибудь имеет опыт работы с этим?Спасибо.
РЕДАКТИРОВАТЬ: Вот мой метод возврата rawContact
private static long lookupRawContact(ContentResolver resolver, String username) {
Log.e("Looking up Raw Contact", username);
long authorId = 0;
Cursor cursor = resolver.query(
Data.CONTENT_URI,
UserIdQuery.PROJECTION,
UserIdQuery.SELECTION,
new String[] {username},
null);
try {
if(cursor != null && cursor.moveToFirst()) {
authorId = cursor.getLong(UserIdQuery.COLUMN_ID);
}
} finally {
if(cursor != null) {
cursor.close();
}
}
return authorId;
}
Номера, которые я получаю, похожи на 3061. Вот класс UserIdQuery:
final private static class UserIdQuery {
private UserIdQuery() {
}
public final static String[] PROJECTION = new String[] {RawContacts._ID};
public final static int COLUMN_ID = 0;
public static final String SELECTION = RawContacts.ACCOUNT_TYPE + "='" +
"com.tagapp.android" + "' AND " + RawContacts.SOURCE_ID + "=?";
}
ИВот мой конструктор для класса ContactSyncOperations, используемого для добавления нового контакта.Идентификатор источника здесь - это имя пользователя, такое же, как я вызываю в своем аргументе SELECTION.
public ContactSyncOperations(Context context, String username,
String accountName, BatchOperationForSync batchOperation) {
this(context, batchOperation);
mBackReference = mBatchOperation.size();
mIsNewContact = true;
mValues.put(RawContacts.SOURCE_ID, username);
mValues.put(RawContacts.ACCOUNT_TYPE, "com.tagapp.android");
mValues.put(RawContacts.ACCOUNT_NAME, accountName);
mBuilder = newInsertCpo(RawContacts.CONTENT_URI, true).withValues(mValues);
mBatchOperation.add(mBuilder.build());
}
Спасибо!