如何从联系人列表中提取50个联系人中的50个?

时间:2018-09-26 05:09:51

标签: android contacts do-while android-contacts

我想从联系人列表中提取50个联系人中的50个。

我尝试了for loop,但它随机给了我10个联系人。

如何通过50个联系人获取50个..请帮助我

我的代码:

ArrayList<Contact_Model> contactList = new ArrayList<Contact_Model>();
            Uri uri = ContactsContract.Contacts.CONTENT_URI;

            Cursor contactsCursor = getContentResolver().query(uri, null, null,
                    null, ContactsContract.Contacts.DISPLAY_NAME + " ASC "); // Return

            if (contactsCursor.moveToFirst()) {

                do {

                    long contctId = contactsCursor.getLong(contactsCursor.getColumnIndex("_ID"));
                    Uri dataUri = ContactsContract.Data.CONTENT_URI; // URI to get
                    Cursor dataCursor = getContentResolver().query(dataUri, null,
                            ContactsContract.Data.CONTACT_ID + " = " + contctId,
                            null, null);

                    // Strings to get all details
                    String displayName = "";
                    String mobilePhone = "";
                    String contactNumbers = "";
                    String cNumber = "";
                    String contactImage = "";

                    String imnage = "";
                    Cursor phonesCursor = null;
                    Person.Urls urls;

                    try {
                        Uri phoneUri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode("Phone number"));
                        phonesCursor = context.getContentResolver().query(phoneUri, new String[]{ContactsContract.PhoneLookup.PHOTO_THUMBNAIL_URI}, null, null, null);
                    } catch (NullPointerException e) {
                        e.printStackTrace();
                    } catch (IllegalArgumentException e) {
                        e.printStackTrace();
                    }

                    if (dataCursor.moveToFirst()) {
                        try {
                            imnage = dataCursor.getString(1);
                            Log.e("detail", "==============" + imnage);
                        } catch (NullPointerException e) {
                            e.printStackTrace();
                        }
                    }

                    if (dataCursor.moveToFirst()) {

                        displayName = dataCursor.getString(dataCursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));// get

                        do {
                            for (i = 0; i < 50; i++) {
                                if (dataCursor. getString(dataCursor.getColumnIndex("mimetype")).equals(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)) {

                                    switch (dataCursor.getInt(dataCursor.getColumnIndex("data2"))) {

                                        case ContactsContract.CommonDataKinds.Phone.TYPE_HOME:
                                            break;
                                        case ContactsContract.CommonDataKinds.Phone.TYPE_WORK:
                                            break;
                                        case ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE:
                                            contactNumbers = dataCursor.getString(dataCursor.getColumnIndex("data1"));
                                            contactNumbers += mobilePhone;
                                            int id = 1;

                                            if (String.valueOf(contactNumbers).charAt(0) == '+') {
                                                if (contactNumbers.length() == 13) {
                                                    String trim_num = contactNumbers.substring(3);
                                                    cNumber = trim_num;
                                                    cNumber = cNumber.replaceAll(" ", "");
                                                    Log.d("number", cNumber);
                                                }
                                            } else {
                                                cNumber = contactNumbers;
                                                cNumber = cNumber.replaceAll(" ", "");
                                                Log.d("without + number", cNumber);
                                            }
//                                            break;
                                    }
                                }
                            }
                            break;
                        } while (dataCursor.moveToNext()); // Now move to next


                        if (!cNumber.equals("")) {
                            contact = new Contact();
                            contact.setContctId(String.valueOf(contctId));
                            contact.setContactNumber(cNumber);
                            contact.setContactName(displayName);
                            contact.setContactImg(imnage);
                            contact.save();

                            contactList.add(new Contact_Model(displayName, cNumber, imnage));// Finally add
                        } else {
                            Log.d("Contact : ", "Don't add empty contact");
                        }
                    }

                } while (contactsCursor.moveToNext());
            }      

我也在光标中尝试了 LIMIT 50 。 但是当我使用 LIMIT 时,没有可用的联系人

Cursor contactsCursor = getContentResolver().query(uri,
                    null, null, null, "LIMIT 10, " + count);

count += 10;

1 个答案:

答案 0 :(得分:0)

方法1

如果要在查询中进行分页,请使用offset

final Cursor c = getContentResolver.query(uri,null,null,null," LIMIT 50 OFFSET 2");

保留上一个offset的值,并在下次发送++offset

方法2

您可以一次获取所有联系人,然后使用分页将其设置在列表中。 @ {Related question

建议

当接触过多时,我也遇到了这个问题。 500-1000,则需要花费几秒钟的时间。

我通过在该活动出现之前获取联系人列表来解决此问题。我获取了联系人并将其保存在Application类中,并在使用后清除了该联系人(以消除内存泄漏)。