【问题标题】:How to access Unique contacts in android app?如何在 Android 应用中访问唯一联系人?
【发布时间】:2020-05-17 17:43:40
【问题描述】:

这是在android中访问联系人的代码:

    private void getContact() {
        arrayList=new ArrayList<>();
        arrayListname=new ArrayList<>();
        arrayListmobno=new ArrayList<>();
        System.out.println("hello");
//        Cursor cursor=getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,null,null,null);
        String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '"+ ("1") + "'";
        String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";

        Cursor cursor=getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null, selection
                + " AND " + ContactsContract.Contacts.HAS_PHONE_NUMBER
                + "=1", null, sortOrder);





            while (cursor.moveToNext())
            {

                final String name=cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
                final String mob=cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                final String regexStr = "^(?:(?:\\+|0{0,2})91(\\s*[\\-]\\s*)?|[0]?)?[789]\\d{9}$";
                System.out.println("omgname "+name +" mob "+mob);
            }
    }

这里可以访问联系人列表中的所有联系人

输出:

网址:

【问题讨论】:

  • 不要将文字作为图片发布
  • 对不起先生,这是logcat文件的输出
  • 你到底想做什么?你所说的唯一联系人是什么意思?
  • 我的意思是联系人列表中的一些联系人是 Comman/彼此相似。我只想获取那些唯一的@MajidAli
  • stackoverflow.com/a/13509116/7924565.. 试试这个答案中的查询

标签: android android-contacts


【解决方案1】:

您可以将联系人附加到字符串中,并一次将 50 个联系人发送到 php 页面。

java代码:

while (cursor.moveToNext()) {

                final String name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
                final String mob = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));


                final String regexStr = "^(?:(?:\\+|0{0,2})91(\\s*[\\-]\\s*)?|[0]?)?[789]\\d{9}$";
                System.out.println("omgname " + name + " mob " + mob);

                arrayListname.add(name.trim());
                arrayListmobno.add(mob.trim());

                if (mob.length() > 9 && !mob.contains("-") && !name.equals("") && !name.equals(".")) {
                    final String myname = name.replaceAll(" ", "_").replaceAll("[^a-zA-Z0-9_]+", "");
                    final String mymobno = mob.replaceAll(" ", "");

                         arrayListmobno.add(mymobno);

                    count = count + 1;

                    if (count == 50) {
                        System.out.println(namearray + "namearrayomg");
                        System.out.println(mobnoarray + "mobnoarrayomg");

                        String url = getResources().getString(R.string.url);
                        String contacts_url = url + "request=contactsarrayList&arrayListname=" + namearray + "&arrayListmobno=" + mobnoarray + "&userid=" + id;
                        System.out.println(contacts_url);
                        AndroidNetworking.get(contacts_url)
                                .setPriority(Priority.LOW)
                                .build()
                                .getAsJSONArray(new JSONArrayRequestListener() {
                                    @Override
                                    public void onResponse(JSONArray response) {
                                        try {

                                        } catch (Exception e) {
                                            Toast.makeText(getApplicationContext(), "JSON Error" + e.getMessage(), Toast.LENGTH_LONG).show();
                                        }
                                    }

                                    @Override
                                    public void onError(ANError anError) {
                                        anError.printStackTrace();
                                    }
                                });


                        namearray = "";
                        mobnoarray = "";
                        count = 0;


                    } else {
                        namearray = namearray + myname + ",";
                        mobnoarray = mobnoarray + mymobno.trim() + ",";

                    }

                }

php代码:

public function contactsarrayList($arrayListname=0,$arrayListmobno=0,$userid=0)
    {
        global $con;
        $arrayListname = substr($arrayListname, 0, -1);
        $arrayListmobno = substr($arrayListmobno, 0, -1);

        $narray =  explode(',', $arrayListname);
        $marray = explode(',', $arrayListmobno);
        $len=count($narray);
        for ($i=0; $i < $len ; $i++) { 

            $retrived1 = $con->query("insert into contacts(userid,name,mobno) values({$userid},'{$narray[$i]}','{$marray[$i]}')");
        }
    }

我知道这看起来有点复杂,但会起作用

还为数据库中的联系人表添加复合唯一键,以便不会重复联系人

【讨论】:

  • 感谢您的工作,先生,但它确实解决了问题,但namearray = namearray + myname + ",";mobnoarray = mobnoarray + mymobno.trim() + ","; 这两个数组仍然包含重复记录
  • 由于复合唯一键@Paul'somgHardware,重复的联系人不会被插入到表中
  • 但 url 中不必要的重复仍然存在
【解决方案2】:

我假设您想在列表中添加详细信息(电话号码)和(姓名)并防止重复。

如果是这样的话:

然后将详细信息添加到列表中(如果它们已经不存在):

private void getContact() {
arrayList=new ArrayList<>();
arrayListname=new ArrayList<>();
arrayListmobno=new ArrayList<>();

String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '"+ ("1") + "'";
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";

Cursor cursor=getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null, selection
                + " AND " + ContactsContract.Contacts.HAS_PHONE_NUMBER
                + "=1", null, sortOrder);


while (cursor.moveToNext()){

final String name=cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
final String mob=cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
final String regexStr = "^(?:(?:\\+|0{0,2})91(\\s*[\\-]\\s*)?|[0]?)?[789]\\d{9}$";

//add details to the list if they don't exist already in the list:

if(!arrayListname.contains(name)){
arrayListname.add(name);
}

if(!arrayListmobno.contains(mob)){
arrayListmobno.add(mob);
}


}

}

【讨论】:

  • 此方法用于防止arraylist中的重复。但是假设有两个同名但手机号码不同的联系人,在这种情况下会产生问题。@Hasan Bou Taam
猜你喜欢
  • 1970-01-01
  • 2012-11-10
  • 2011-10-02
  • 1970-01-01
  • 2019-02-22
  • 2011-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多