2016-07-08 23 views
1

Ich möchte eine einfache App erstellen, um die Geburtsdaten des Kontakts zu erhalten. Im Folgenden habe ich etwas Code implementiert, aber ich weiß nicht, was eigentlich vor sich geht.Wie bekomme ich Geburtstage von Kontakten in 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(); 
     }     
    } 

In obigem Code erfolgreich die E-Mail und Namen, den ich bekommen, aber ich kann nicht Geburtstage bekommen, da es keine Methoden zur Verfügung, wie „contacts.birthday“ sind Danke.

Die Ausnahme, die ich gefangen ist:

'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

Die Fehlermeldung sagt, was falsch ist. "Sequenz enthält keine passenden Element." Du fragst nach dem ersten 'ContactDate', das ist ein Geburtstag, aber was, wenn es überhaupt keinen gibt? –

+0

Nein, aber ich habe einen Kontakt mit dem Geburtsdatum erstellt und ich versuche es mit diesem. Obwohl ich den Geburtstag nicht bekommen habe. Aber glücklicherweise habe ich den Weg gefunden. Schaut einfach die unten stehende Antwort von @GraceFeng an, BTW danke für die Antwort. –

+0

Aber Sie haben nicht nach den wichtigen Daten gefragt, die zurückgegeben werden sollen. Sie haben nicht 'contactPicker.DesiredFieldsWithContactFieldType.Add (ContactFieldType.ImportantDate);' –

Antwort

0

Es scheint, dass mit der ContactPicker nicht alle Informationen von Kontakt bekommen. Die Zahl der IList<ContactDate> ImportantDates ist immer 0.

Ich fand nur eine Lösung für Ihr Szenario, wenn Sie ContactPicker hier mit beharren, können Sie den Kontakt des ID erhalten, und diese ID verwenden den gleichen Kontakt zu finden, aber von ContactStore zum Beispiel wie folgt:

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

Vielen Dank für Ihre Antwort @ GraceFeng, ich habe versucht, Ihre Arbeit herum und ich habe das gewünschte Ergebnis. Danke . Du hast meinen Tag gerettet. –