在我的应用程序中多次显示电话簿中的某些联系人

2024-02-09

我在我的应用程序中收到相同的联系人三到两次,这种情况发生在某些联系人上,而不是每个联系人上。在我的应用程序中,一切都按预期工作,但是当单击我的显示联系人时,它会显示三个相同的联系人,但在手机联系人中仅存储一次。我从我这边尝试了一切,但无法解决这个问题,任何人都可以帮助我。或者有什么替代方法吗?

这是我的代码:-

    @Override
protected Integer doInBackground(Void... params) {


    try {


        db = new WhooshhDB(myContext);
        this.list = new ArrayList<>();

        ContentResolver cr = myContext.getContentResolver();

        Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,
                null, null, null, "UPPER(" + ContactsContract.Contacts.DISPLAY_NAME + ") ASC");
        if ((cur != null ? cur.getCount() : 0) > 0) {

            while (cur != null && cur.moveToNext()) {

                String id = cur.getString(
                        cur.getColumnIndex(ContactsContract.Contacts._ID));
                String name = cur.getString(cur.getColumnIndex(
                        ContactsContract.Contacts.DISPLAY_NAME));

                if (cur.getInt(cur.getColumnIndex(
                        ContactsContract.Contacts.HAS_PHONE_NUMBER)) > 0) {
                    Cursor pCur = cr.query(
                            ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                            null,
                            ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?",
                            new String[]{id}, null);
                    while (pCur.moveToNext()) {
                        String phoneNo = pCur.getString(pCur.getColumnIndex(
                                ContactsContract.CommonDataKinds.Phone.NUMBER));

                        ContactModel model = new ContactModel();

                        if (phoneNo.replaceAll("\\s", "").trim().length() > 7) {
                            model.name = name;
                            model.mobileNumber = phoneNo.replaceAll("\\s", "");
                            if (model.mobileNumber.contains("-")) {
                                model.mobileNumber = model.mobileNumber.replaceAll("-", "");
                            }
                            model.iconHexColor = AppConstant.getRandomSubscriptionHexColor(myContext);
                            if (!phoneNumber.equals(model.mobileNumber)) {
                                list.add(model);
                            }

                        }

                        Log.i("FetchContacts", "Name: " + name);
                        Log.i("FetchContacts", "Phone Number: " + phoneNo);
                    }
                    pCur.close();
                }
            }
        }
        if (cur != null) {
            cur.close();
        }

        return AppConstant.SUCCESS;
    } catch (Exception ex) {
        return null;
    }
}

您正在为每个联系人的每部电话打印这些“FetchContacts”日志,因此,如果某个联系人为她存储了多个电话,您将看到它被打印多次(即使是相同的电话号码)。

如果您安装了像 Whatsapp 这样的应用程序,那么您几乎总是会看到每个联系人的所有电话号码都是重复的,从而导致每个联系人多次打印这些日志。

此外,这是一种通过手机获取联系人的缓慢而痛苦的方式。 相反,您可以直接通过 Phones.CONTENT_URI 查询并获取数据库中的所有电话,并通过 Contact-ID 将它们映射到联系人:

Map<String, List<String>> contacts = new HashMap<String, List<String>>();

String[] projection = { Phone.CONTACT_ID, Phone.DISPLAY_NAME, Phone.NUMBER };
Cursor cur = cr.query(Phone.CONTENT_URI, projection, null, null, null);

while (cur != null && cur.moveToNext()) {
    long id = cur.getLong(0); // contact ID
    String name = cur.getString(1); // contact name
    String data = cur.getString(2); // the actual info, e.g. +1-212-555-1234

    Log.d(TAG, "got " + id + ", " + name + ", " + data);

    // add info to existing list if this contact-id was already found, or create a new list in case it's new
    String key = id + " - " + name;
    List<String> infos;
    if (contacts.containsKey(key)) {
        infos = contacts.get(key);
    } else {
        infos = new ArrayList<String>();
        contacts.put(key, infos);
    }
    infos.add(data);
}

// contacts will now contain a mapping from id+name to a list of phones.
// you can enforce uniqueness of phones while adding them to the list as well.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在我的应用程序中多次显示电话簿中的某些联系人 的相关文章

  • Hazelcast 分布式锁与 iMap

    我们目前使用 Hazelcast 3 1 5 我有一个简单的分布式锁定机制 应该可以跨多个 JVM 节点提供线程安全性 代码非常简单 private static HazelcastInstance hInst getHazelcastIn
  • Calendar.getInstance(TimeZone.getTimeZone("UTC")) 不返回 UTC 时间

    我对得到的结果真的很困惑Calendar getInstance TimeZone getTimeZone UTC 方法调用 它返回 IST 时间 这是我使用的代码 Calendar cal Two Calendar getInstance
  • 将 SignedHash 插入 PDF 中以进行外部签名过程 -workingSample

    遵循电子书第 4 3 3 节 PDF 文档的数字签名 https jira nuxeo com secure attachment 49931 digitalsignatures20130304 pdf 我正在尝试创建一个工作示例 其中 客
  • 普罗米修斯指标 - 未找到

    我有 Spring Boot 应用程序 并且正在使用 vertx 我想监控服务和 jvm 为此我选择了 Prometheus 这是我的监控配置类 Configuration public class MonitoringConfig Bea
  • 如何在selenium服务器上提供自定义功能?

    我知道可以通过某种方法获得一些硒功能 其中之一如下 driver getCapabilities getBrowserName 它返回浏览器名称的值 但如果它指的是一个可用的方法 如果我没有误解的话 这似乎与自定义功能有关 就像我的意思是
  • Java整数双除法混淆[重复]

    这个问题在这里已经有答案了 方案1 int sum 30 double avg sum 4 result is 7 0 not 7 5 VS 方案2 int sum 30 double avg sum 4 0 Prints lns 7 5
  • 有关 ListView 自定义行布局项目上的 onClick() 事件的帮助

    我有一个 ListView 其行由我格式化 每行都有 ImageView 和 TextView 的混合 我还实现了自己的适配器 并且能够通过它绘制每一行 现在 我想要这样的东西 用户单击 ImageView 不是行上的其他任何位置 但只有此
  • 如何知道抛出了哪个异常

    我正在对我们的代码库进行审查 有很多这样的陈述 try doSomething catch Exception e 但我想要一种方法来知道 doSomething 抛出了哪个异常 在 doSomething 的实现中没有 throw 语句
  • 按钮 - 单击时更改背景颜色

    我的活动中有 8 个按钮 我正在寻找的是 按钮具有默认背景 单击按钮时 背景颜色应更改为其他颜色 这部分非常简单 但是 当我单击任何其他按钮时 第一个按钮的背景颜色应该变回默认颜色 我知道这将使用 选择器状态 来完成 但我不太确定如何实现它
  • 如何在android asynctask中使用inputstream作为参数?

    我正在制作一个 Android 应用程序来跟踪股票详细信息 我将通过 csv 雅虎财经 检索数据 据我所知 在android 4 0中 网络连接无法在主线程上完成 因此 我将使用 asynctask 来建立连接 但是 我在参数方面遇到了一些
  • 游戏内的java.awt.Robot?

    我正在尝试使用下面的代码来模拟击键 当我打开记事本时 它工作正常 但当我打开我想使用它的游戏时 它没有执行任何操作 所以按键似乎不起作用 我尝试模拟鼠标移动和点击 这些动作确实有效 有谁知道如何解决这个问题 我发现这个问题 如何在游戏中使用
  • 错误:无法创建新会话,因为找不到需要 HttpClient、InputStream 和 long 的“createSession”

    我正在尝试自动化 Android 混合应用程序 但出现以下错误 1 线程 main org openqa selenium WebDriverException中出现异常 无法创建新会话 因为未找到需要 HttpClient InputSt
  • Android 中循环事件的星期几和时间选择器

    我想创建一个控件 允许用户在我的 Android 活动中选择一周中的某一天 星期一 和一天中的某个时间 下午 1 00 找不到任何关于此的好帖子 好吧 我想我已经明白了 我只是不喜欢这个解决方案 因为我在一周中的某一天使用的微调器与时间选择
  • Java中的Object类是什么?

    什么是或什么类型private Object obj Object http download oracle com javase 6 docs api java lang Object html是Java继承层次结构中每个类的最终祖先 从
  • spring中如何使用jackson代替JdkSerializationRedisSerializer

    我在我的一个 Java 应用程序中使用 Redis 并且正在序列化要存储在 Redis 中的对象列表 但是 我注意到使用 RedisTemplate 会使用 JdkSerializationRedisSerializer 相反 我想使用 J
  • 具有特定参数的 Spring AOP 切入点

    我需要创建一个我觉得很难描述的方面 所以让我指出一下想法 com x y 包 或任何子包 中的任何方法 一个方法参数是接口 javax portlet PortletRequest 的实现 该方法中可能有更多参数 它们可以是任何顺序 我需要
  • 使用 JobScheduler API 进行位置更新

    下面是我使用 FireBaseJobDispatcher 启动作业的演示代码 public class MainActivity extends AppCompatActivity Override protected void onCre
  • FileOutputStream.close() 中的设备 ioctl 不合适

    我有一些代码可以使用以下命令将一些首选项保存到文件中FileOutputStream 这是我已经写了一千遍的标准代码 FileOutputStream out new FileOutputStream file try BufferedOu
  • 使用单选按钮更改背景颜色 Android

    我试图通过从单选组中选择单选按钮来更改应用程序选项卡的背景 但是我不确定如何执行此操作 到目前为止我已经 收藏夹 java import android app Activity import android os Bundle publi
  • 如何在片段中实现 onBackPressed() 和意图?

    我知道 onBackPressed 是活动中的一种方法 但是 我想在片段中使用该功能 以便当按下后退按钮时 它会通过 Intent 重定向到另一个活动 有什么办法解决这个问题吗 public class News Events fragme

随机推荐

  • IEnumerable 作为 WCF 方法的返回类型

    如果我定义一个具有字符串和日期时间属性的 Test 对象 并使用它返回 WCF 中的 IEnumerable T 集合 OperationContract IEnumerable
  • 如何在spyder中添加所有python库

    如何在 Spyder IDE 中添加我已使用终端下载并存在于目录 home username local lib python3 6 site packages 中的所有 python 库 我找到了答案 只需转到 工具 gt PYTHONP
  • 聚合根引用其他聚合根

    我目前正在大量使用 DDD 并且在从其他聚合根加载 操作聚合根时遇到问题 对于模型中的每个聚合根 我还有一个存储库 存储库负责处理根的持久性操作 假设我有两个聚合根 以及一些成员 实体和值对象 聚合根 1 和聚合根 2 AggregateR
  • 在一个逗号分隔的单元格中显示所有匹配的值

    我的 Excel 2010 电子表格中有两列数据 A 列中是一个类别 B 列中是一个值 对于 A 列中的每个唯一类别 B 列中将有多个值 我想在单独的工作表中实现的目标是在一个逗号 或分号等 分隔的单元格中显示每个唯一类别的所有值 例如 如
  • kafka-python 中的多处理

    我一直在使用 python kaka 模块从 kafka 代理中消费 我想并行使用具有 x 个分区的同一主题 该文档有这样的内容 Use multiple consumers in parallel w 0 9 kafka brokers
  • 从 GitHub 下载速度非常慢

    从 GitHub 克隆存储库时 我有时只能获得 50 100 KiB 秒 保持稳定 的下载速率 而大多数时候我的下载速率约为 10 MiB 秒 当从不同的机器 不同的全局IP 克隆相同的存储库时 我获得了全速 GitHub 对存储库克隆有速
  • 从 JavaScript 对象创建 HTML 表

    我是 JavaScript 的初学者 想要在 HTML 中显示对象数组 数据的格式是这样的 key apple value 1 90 key berry value 1 7 key banana value 1 5 key cherry v
  • 在 Android 中使用 firebase firestore 在不同条件下创建私人聊天和群聊

    我必须使用 firebase firestore 在现有应用程序中实现聊天功能 但有两种情况 创建私人聊天 在这种情况下 我有包含用户列表的回收器视图 同时我选择特定用户 然后开始当前用户和所选用户的通信 群聊 在这种情况下 我有食品列表
  • Linux内核中memcpy的实现

    I see memcpylinux内核实模式下的实现 GLOBAL memcpy pushw si pushw di movw ax di movw dx si pushw cx shrw 2 cx rep movsl popw cx an
  • 如何通过CSS自定义一个select元素来实现这种深色风格呢?

    如何创建如下图所示的选择元素 我的代码是
  • 使用 DatePicker 和 TimePicker 对话框 - Eclipse 中的 Android Java

    我的代码没有错误 但是当我启动时 我在主 XML 页面中收到一个致命错误 内容如下 03 21 22 00 31 849 E AndroidRuntime 606 java lang RuntimeException 无法实例化活动 Com
  • Android JUnit:定义不同的应用程序子类

    因此 对于我的普通 Android 项目 我在 AndroidManifest xml 中有以下内容
  • 使用 RedirectToAction 时如何在视图中显示成功消息

    我正在开发 MVC3 项目 我想在视图中使用 RedirectToAction 时显示一条消息 我已经使用了 ViewBag 但它不起作用 请任何人帮助我 您可以使用 TempData 来显示消息 在你看来 if TempData Succ
  • SPARK、ML、Tuning、CrossValidator:访问指标

    为了构建 NaiveBayes 多类分类器 我使用 CrossValidator 在管道中选择最佳参数 val cv new CrossValidator setEstimator pipeline setEstimatorParamMap
  • 如何将Excel文件导入到DataWindow中

    我想将 xlsx 文件导入到 PowerBuilder DataWindow 中 我知道我们可以使用 CSV 格式来完成此操作 但用户想要使用 xlsx 格式 请告诉我是否有任何导入选项 你可以像这样导入xls 这是我们的导入功能 当然 您
  • 选择行中包含特定值的列的名称

    我正在使用数据框 data frame A c NA 5 NA NA NA B c 1 2 3 4 NA C c NA NA NA 2 3 D c NA NA NA 7 NA 这会提供以下形式的 data frame A B C D 1 N
  • Android Studio:“错误:无法找到或加载主类”

    我已经使用 Android Studio 大约几周了 到目前为止没有任何问题 但最近 当我尝试打开 Android Studio 时 我开始收到此错误 我使用Ubuntu 16 10 Tools android studio bin stu
  • Android 页面控件像书一样?

    我想开发页面控件 例如book 意味着当用户拖动页面 向左或向右 时 控件将移动下一页或上一页 视图也移动 取决于用户使用手指拖动的方式 看一眼绿色机器人 https github com cyrilmottier GreenDroid s
  • 在 iOS 上加载 obj 文件的最佳方法[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 由于 OpenGL 没有像 GLLoadObjFile myModel obj 这样的函数 在 iOS 应用程序中加载 obj 等 3D
  • 在我的应用程序中多次显示电话簿中的某些联系人

    我在我的应用程序中收到相同的联系人三到两次 这种情况发生在某些联系人上 而不是每个联系人上 在我的应用程序中 一切都按预期工作 但是当单击我的显示联系人时 它会显示三个相同的联系人 但在手机联系人中仅存储一次 我从我这边尝试了一切 但无法解