2016-11-02 2 views
0

Как создать список (FirstName, LastName, PhoneNumber)?Как создать список контактов Android с xamarin?

Мой код создал только FirstName и LastName.

public List<PersonContact> GetPhoneContacts() 
    { 
     _phoneContacts = new List<PersonContact>(); 
     PhoneContacts = new List<PersonContact>(); 
     var ctx = Forms.Context; 
     var contactList = new List<string>(); 
     var uri = ContactsContract.Contacts.ContentUri; 
     string[] projection = { ContactsContract.Contacts.InterfaceConsts.Id, ContactsContract.Contacts.InterfaceConsts.DisplayName }; 
     var cursor = ctx.ApplicationContext.ContentResolver.Query(uri, projection, null, null, null); 

     if (cursor.MoveToFirst()) 
     { 
      do 
      { 
       contactList.Add(cursor.GetString(cursor.GetColumnIndex(projection[1]))); 
      } 
      while (cursor.MoveToNext()); 
     } 
     var sortedList = contactList.Where(s => s.Contains(" ")); 

     foreach (var cont in sortedList) 
     { 
      string[] words = cont.Split(' '); 
      PersonContact contact = new PersonContact(); 
      contact.FirstName = words[0]; 
      contact.LastName = words[1]; 
      _phoneContacts.Add(contact); 
     } 
     PhoneContacts = _phoneContacts; 
     return PhoneContacts; 
    } 

Возьмем, к примеру, один элемент списка «Kate Parry» и разделите эту строку.

Моя основная проблема заключается в том, что вы получаете 2000 адресов электронной почты. Найдите '' и отфильтруйте.

Пожалуйста ПОМОГИТЕ ((

+0

Итак, позвольте мне уточнить, если я получил это право. Вам нужно Имя, фамилия и номер телефона? Из того, что я вижу, вы решите, если человек имеет первую или фамилию с помощью Split Что делать, если у человека есть только имя, вы хотите отфильтровать его? И вам вообще не хватает номера телефона. Это правильно? –

ответ

1
public List<PersonContact> GetPhoneContacts() 
    { 
     var phoneContacts = new List<PersonContact>(); 

     using (var phones = ApplicationContext.ContentResolver.Query(ContactsContract.CommonDataKinds.Phone.ContentUri, null, null, null, null)) 
     { 
      if (phones != null) 
      { 
       while (phones.MoveToNext()) 
       { 
        try 
        { 
         string name = phones.GetString(phones.GetColumnIndex(ContactsContract.Contacts.InterfaceConsts.DisplayName)); 
         string phoneNumber = phones.GetString(phones.GetColumnIndex(ContactsContract.CommonDataKinds.Phone.Number)); 

         string[] words = name.Split(' '); 
         PersonContact contact = new PersonContact(); 
         contact.FirstName = words[0]; 
         if (words.Length > 1) 
          contact.LastName = words[1]; 
         else 
          contact.LastName = ""; //no last name, is that ok? 
         contact.PhoneNumber = phoneNumber; 
         phoneContacts.Add(contact); 
        } 
        catch (Exception ex) 
        { 
         //something wrong with one contact, may be display name is completely empty, decide what to do 
        } 
       } 
       phones.Close(); //not really neccessary, we have "using" above 
      } 
      //else we cannot get to phones, decide what to do 
     } 

     return phoneContacts; 
    } 


public class PersonContact 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string PhoneNumber { get; set; } 
} 
+1

это сработало для вас? –

+0

хорошая работа !, но если пользователь создаст контакт с телефоном только с LastName Как получить контакт.LastName по-другому? И, пожалуйста, унифицированный код (если контакт с телефоном без номера телефона). Я хочу получить все контакты списка (с номером телефона и без). Извините за мой английский +)) –

+0

Вам не кажется, что вы может пойти f здесь? :-) –

Смежные вопросы