如何将电话簿中的联系人总数显示到文本视图

Posted

技术标签:

【中文标题】如何将电话簿中的联系人总数显示到文本视图【英文标题】:How can I display total number of contacts from the phonebook to a text view 【发布时间】:2014-02-22 22:48:01 【问题描述】:

我能够获取联系人总数,但问题是,它来自 sqlite,并且电话簿中的联系人数量与我从数据库中获取的数量不同。 这是我的代码:

Cursor cursor = managedQuery(ContactsContract.Contacts.CONTENT_URI,
                null, null, null, null);
        // Or this cursor
        Cursor cursor = managedQuery(
                ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null,
                null, null);

        int count = cursor.getCount();

        try 
            tv1.setText(String.valueOf(count));
            Log.i("Contacts: ", String.valueOf(count));
         catch (Exception e) 
            // TODO Auto-generated catch block
            e.printStackTrace();
        

我能够获取数据库中的联系人总数,但它与电话簿中显示的联系人不同。

任何建议或帮助将不胜感激。

【问题讨论】:

你得到的可能是正确的,因为在联系人应用程序中,它不会计算加入的联系人!!! 感谢您的信息。有没有其他方法可以获取确切的信息? 我猜,这与您传递的 4 个空参数有关。在this链接中尝试不同的方法。 【参考方案1】:

我仍在学习,所以我确信有比这更快的方法,但我所做的只计算唯一名称是使用 if 语句获取唯一名称以分配给我的联系人列表并计算数量唯一的名字,这给了我一个准确的数字。这是我使用的代码,我希望有人可以接受并建议一种更有效的方法。希望这会有所帮助。

“nameCount”是您在此示例中要查找的数字。

private void getContacts() 

        String name = "";
        String contact_id;
        int nameCount = 0;

        uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
        projection = new String[] 
                ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
                ContactsContract.CommonDataKinds.Phone.CONTACT_ID ;
        selection = null;
        selectionArgs = null;
        sortOrder = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME;

        Cursor peopleCursor = getContentResolver().query(uri, projection,
                selection, selectionArgs, sortOrder);

        if (peopleCursor != null) 

            int indexName = peopleCursor
                    .getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);
            int indexId = peopleCursor
                    .getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID);

            while (peopleCursor.moveToNext()) 

                // this is a separate activity used for my listView.  
                //It containts 2 strings (name and _id) with getters and setters for both
                ContactNameItems nameItems = new ContactNameItems();

                // Filter out no-name contacts such as auto-added email addresses from gmail
                // Compare to value of 'name' to see if they're the same, if so then pass
                if (!peopleCursor.getString(indexName).isEmpty() &&
                            !peopleCursor.getString(indexName)
                                    .equalsIgnoreCase(name) 

                    name = peopleCursor.getString(indexName);
                    contact_id = peopleCursor.getString(indexId);
                    nameCount++; //Do something with this


                    nameItems.setName(name);
                    nameItems.set_id(contact_id);

                    //Listview to add my 'nameItems'
                    mListView.add(nameItems);

                    mListAdapter.notifyDataSetChanged();
                
            
            peopleCursor.close();
        
    

【讨论】:

以上是关于如何将电话簿中的联系人总数显示到文本视图的主要内容,如果未能解决你的问题,请参考以下文章

创建自动完成文本视图以显示联系人

如何仅显示电话联系人(不包括 SIM 联系人)

如何访问电话簿联系人?

如何使用 EditText 在列表视图中搜索联系人?

在图像视图中显示联系人图像

将 iphone 联系人中的联系人添加到我的表格视图