简体   繁体   English

Xamarin.forms中重复的联系电话

[英]Contact Number repeating in Xamarin.forms

I am facing a issue while retrieving contact list from the phone i am getting same contact number for all contact names in Xamarin.Forms. 从电话中检索联系人列表时遇到问题,我在Xamarin.Forms中获得所有联系人姓名的相同联系人号码。 I am new in Xamarin and want to load all phone contacts in listview. 我是Xamarin的新手,想在listview中加载所有电话联系人。 Here is my Code: 这是我的代码:

  private List<ContactMenu> LoadAllContacts()
    {
        List<ContactMenu> getContactNamesAndNumber = new List<ContactMenu>();
        //Bind Contacts
        var forContactNames = ContactsContract.Contacts.ContentUri;
        string[] forContactNumbers = {
        ContactsContract.Contacts.InterfaceConsts.Id,
        ContactsContract.Contacts.InterfaceConsts.DisplayName
    };
        var forContactNumber = ContactsContract.CommonDataKinds.Phone.ContentUri;
        string[] forContactDisplayNumber = { ContactsContract.Contacts.InterfaceConsts.Id, ContactsContract.CommonDataKinds.Phone.Number };
        var names = ManagedQuery(forContactNames, forContactNumbers, null, null, null);
        var nameList = new List<string>();
        var number = ManagedQuery(forContactNumber, forContactDisplayNumber, null, null, null);
        var numbeList = new List<string>();
        if (names.MoveToFirst() && number.MoveToFirst())
        {
            do
            {
                getContactNamesAndNumber.Add(new ContactMenu
                {
                   ContactName =  names.GetString(names.GetColumnIndex(forContactNumbers[1])), ContactNumber = number.GetString(number.GetColumnIndex(forContactDisplayNumber[1]))
                });
                numbeList.Add(number.GetString(number.GetColumnIndex(forContactDisplayNumber[1])));
                nameList.Add(names.GetString(names.GetColumnIndex(forContactNumbers[1])));
            } while (names.MoveToNext());
        }
        ListAdapter = new ArrayAdapter<string>(this, Resource.Layout.ContactItemView, numbeList);
        return getContactNamesAndNumber;
    }

And My Xaml : 和我的Xaml:

 <StackLayout HorizontalOptions="Center">
    <Label Text="Please Select Contact" TextColor="Black" FontFamily="Arial" FontSize="Medium" Font="16"></Label>
    <ListView x:Name="myContacts" HorizontalOptions="Start" ItemTapped="myContacts_ItemTapped">
        <ListView.ItemTemplate>
            <DataTemplate>
                <TextCell Text="{Binding ContactName}" DetailColor="Green" TextColor="Black"/>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</StackLayout>

You have two ManagedQuery s, names and number but are only advancing the names query via names.MoveToNext() at the end of your do loop. 您有两个ManagedQuery ,即namesnumber但仅在do循环的末尾通过names.MoveToNext()来推进names查询。

You should remove one of the ManagedQuery and return all the columns that you need in just one query so you can obtain the name and matching number from the same data row. 您应该删除其中一个ManagedQuery并在一个查询中返回所需的所有列,以便可以从same数据行中获取名称和匹配编号。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM