我想创建一个简单的应用来获取联系人的出生日期。下面我已经实现了一些代码,但我不知道实际发生了什么。
var contactPicker = new ContactPicker();
contactPicker.CommitButtonText = "Select";
contactPicker.SelectionMode = ContactSelectionMode.Fields;
contactPicker.DesiredFieldsWithContactFieldType.Add(ContactFieldType.PhoneNumber);
contactPicker.DesiredFieldsWithContactFieldType.Add(ContactFieldType.Email);
var contacts = await contactPicker.PickContactsAsync();
if (contacts != null && contacts.Count > 0)
{
try
{
foreach (Contact contact in contacts)
{
var birthday = contact.ImportantDates.First(d => d.Kind ==
ContactDateKind.Birthday);
textBlock.Text = birthday.Day.ToString();
}
}
catch (Exception w)
{
textBlock.Text = w.ToString();
}
}
在上面的代码中,我成功地收到了电子邮件和姓名,但由于没有像#34; contacts.birthday"这样的方法,我无法过生日。谢谢。
我抓到的例外是:
'System.InvalidOperationException' in System.Linq.dll
System.InvalidOperationException: Sequence contains no matching element at
System.Linq.Enumerable.First[TSource](IEnumerable`1 source, Func`2
predicate) at ContactApiSample.MainPage.<button_Click>d__1.MoveNext()
答案 0 :(得分:0)
似乎使用ContactPicker无法获得所有联系信息。 IList<ContactDate> ImportantDates
的计数始终为0.
我刚刚为您的方案找到了一种解决方法,如果您坚持在此处使用ContactPicker
,则可以获取该联系人的ID,并使用此ID从ContactStore查找相同的联系人例如:
if (contacts != null && contacts.Count > 0)
{
try
{
ContactStore allAccessStore = await ContactManager.RequestStoreAsync(ContactStoreAccessType.AppContactsReadWrite);
foreach (Contact contact in contacts)
{
var storecontact = await allAccessStore.GetContactAsync(contact.Id);
var birthday = storecontact.ImportantDates.First(d => d.Kind ==
ContactDateKind.Birthday);
}
}
catch (Exception w)
{
//textBlock.Text = w.ToString();
}
}