我正在尝试向联系人添加生日事件,但在人物应用中显示联系人时,未显示事件。当进入联系人的“编辑”模式时,会显示一个事件,但没有选择日期(请参阅附带的屏幕截图),就好像格式错误一样。
在sqlite查看器中检查contacts2.db时,似乎日期已格式化 很好,就像其他正确显示的事件/生日一样(参见附图。第一行是通过应用程序手动输入的生日,第二行是我的应用程序添加的,未显示)
这是我正在使用的代码,它遵循$ ANDROID_HOME sdk中的SampleSyncAdapter
public ContactOperations addBirthday(Date date) {
mValues.clear();
if(date!=null) {
mValues.put(ContactsContract.CommonDataKinds.Event.TYPE, ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY);
mValues.put(ContactsContract.CommonDataKinds.Event.START_DATE, BIRTHDATE_FORMATTER.format(date));
mValues.put(ContactsContract.CommonDataKinds.Event.MIMETYPE, ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE);
addInsertOp();
}
return this;
}
private void addInsertOp() {
if (!mIsNewContact) {
mValues.put(ContactsContract.CommonDataKinds.Phone.RAW_CONTACT_ID, mRawContactId);
}
ContentProviderOperation.Builder builder =
newInsertCpo(ContactsContract.Data.CONTENT_URI, mIsSyncOperation, mIsYieldAllowed);
builder.withValues(mValues);
if (mIsNewContact) {
builder.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, mBackReference);
}
mIsYieldAllowed = false;
mBatchOperation.add(builder.build());
}
答案 0 :(得分:0)
我刚遇到同样的问题,最后我解决了。 我用其他方式编写了我的代码,但步骤和结果是一样的。
我使用你的日期格式(“YYYY-MM-DD”),它对我来说很好。
ArrayList <ContentProviderOperation> ops = new ArrayList < ContentProviderOperation > ();
ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
.withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)
.build());
if (!myDate != null) {
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.Event.DATA, myDate)
.withValue(ContactsContract.CommonDataKinds.Event.TYPE, ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY)
.build());
}
// Asking the Contact provider to create a new contact
try {
getActivity().getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
} catch (Exception e) {
e.printStackTrace();
}
我也改变了两个“null's”(也考虑了null的作品):
.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, "com.google")
.withValue(ContactsContract.RawContacts.ACCOUNT_NAME, --your google account--)
我希望能帮助你,抱歉我的英语不好。