如何从UWP中的联系人中获取生日?

问题描述:

我想创建一个简单的应用程序来获取联系人的出生日期。下面我已经实现了一些代码,但我不知道实际发生了什么。如何从UWP中的联系人中获取生日?

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(); 
     }     
    } 

在上面的代码中,我顺利拿到了电子邮件,姓名等,但因为没有可用像“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() 
+1

错误消息说出了什么问题。 “序列不包含匹配的元素。”你问第一个'ContactDate'是一个生日,但如果没有一个呢? –

+0

不,但我已经创建了一个联系人的出生日期,我正在尝试与那一个。虽然我没有得到生日。幸运的是,我找到了方法。看看@GraceFeng提供的下面的答案,BTW谢谢你的回复。 –

+0

但你没有要求重返的重要日期。你没有说'contactPicker.DesiredFieldsWithContactFieldType.Add(ContactFieldType.ImportantDate);' –

看来,使用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(); 
    } 
} 
+0

谢谢你的回复@GraceFeng,我已经尝试过你的工作,并且我得到了期望的结果。谢谢 。你让我今天一整天都感觉很好。 –