如何将阵列列表与移动联系人进行比较

时间:2015-11-20 06:02:48

标签: android arraylist android-contacts

我有一个数组列表。

1)我的第一个ArrayList<String> some_num = new ArrayList<String>();包含这样的值。

[1111111111, 2222222222] 

现在我试图将此与我的移动联系人进行比较。

  Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
  String[] projection = new String[] {ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
                        ContactsContract.CommonDataKinds.Phone.NUMBER};

                Cursor people = getActivity().getContentResolver().query(uri, projection, null, null, null);

                int indexName = people.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);
                int indexNumber = people.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
                int j_count=0;
                String number;
                people.moveToFirst();
                do {

                    String name   = people.getString(indexName);
                     number = people.getString(indexNumber);
                    j_count++;


                    // Do work...
                } while (people.moveToNext());




                for(int j=0;j<=j_count;j++){

                    if (some_num.contains(number)){
                        // do nothing
                    }
                    else{
                    Log.e("num",number);
                    }
                }

我试图从移动电话簿中获取我的ArrayList中不存在的那些数字。我知道在条件中我必须获得数组的值,但是当我尝试这样做时,我没有得到其余的联系。

提前致谢

3 个答案:

答案 0 :(得分:6)

不要使用任何其他循环来比较数字。参考以下代码:

Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
  String[] projection = new String[] {ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
                        ContactsContract.CommonDataKinds.Phone.NUMBER};

                Cursor people = getActivity().getContentResolver().query(uri, projection, null, null, null);

                int indexName = people.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);
                int indexNumber = people.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
                int j_count=0;
                String number;
                people.moveToFirst();
                do { 

                    String name   = people.getString(indexName);
                     number = people.getString(indexNumber);

                      if (some_num.contains(number)){
                      }else{
                      }

                    j_count++;


                    // Do work... 
                } while (people.moveToNext());

您的代码有什么问题?

您正在将数组与包含最后一个数字引用的number变量进行比较。因为你只获得单一结果。

如果您仍然想要使用您的代码,那么创建另一个arrayList,您可以在其中存储所有数字:

ArrayList<String> numberList = new ArrayList<String>();

并在此列表中添加数字,使用j ++之前的行;

numberList.add(number);

现在更新你的上一个迭代器块,就像这样工作:

       for(int j=0;j<numberList.siz();j++){

            if (some_num.contains(numberList.get(i)){
                // do nothing 
            } 
            else{ 
            Log.e("num",numberList.get(i));
            } 
        } 

要获得User的完整详细信息,您可以创建Model类,其中包含如下用户详细信息:

public class UserDetails{
    private String userName;
    private String userPhone;
    private String userImage;

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getUserPhone() {
        return userPhone;
    }

    public void setUserPhone(String userPhone) {
        this.userPhone = userPhone;
    }

    public String getUserImage() {
        return userImage;
    }

    public void setUserImage(String userImage) {
        this.userImage = userImage;
    }
}

现在,您必须在活动中使用此模型来获取和设置用户的详细信息:

ArrayList<UserDetails> mUserDetailList = new ArrayList<UserDetails>();

并获取联系人姓名使用此代码:

  String name   = people.getString(indexName);

现在存储名称和电话号码如下:

UserDetails mUserModel = new UserDetails();

mUserModel.setUserPhone(number);
mUserModel.setUserName(name);

mUserDetailList.add(mUserModel);

现在检查号码是否存在:

 for(int j=0;j<mUserDetailList.siz();j++){

            if (some_num.contains(mUserDetailList.get(i).getUserPhone()){ 
                // do nothing  
            }  
            else{  
            Log.e("num",numberList.get(i).getUserPhone());
            Log.e("name",numberList.get(i).getUserName());
            }  
        }  

希望这能解决您的问题。

答案 1 :(得分:1)

一个理想的解决方案是使用哈希地图

将整个联系人存储在哈希映射中作为密钥 通过简单地尝试将值放入哈希映射来检查您的列表是否具有这些数字。

这将起到哈希映射不会重复的作用,当你尝试插入重复键时,你会知道

修改 我认为您的代码可能适用于此修复

tr

答案 2 :(得分:1)

尝试如下,不要忘记在重复使用时清除列表

ArrayList<String>  list = new ArrayList<String>();

 people.moveToFirst();
                do {

                    String name   = people.getString(indexName);
                     number = people.getString(indexNumber);
                     list.add(number);
                    j_count++;


                    // Do work...
                } while (people.moveToNext());

for(String str:list)
{

  if(yournumber.equalsIgnoreCase(str))
{ 
    //do your stuff
}

}