Android 分页加载联系人

2024-09-05 11:38

本文主要是介绍Android 分页加载联系人,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

需求:

很多需求都需要加载手机联系人,一次性加载全部的联系人有比较耗时,所以分页加载时比较理想的。分页加载数据需要考虑的就是数据的排序问题,保证同样的时间每次query的时候排序要一样的,不然分页就没有意义(数据紊乱的现象)。分页须知:每页加载数,数据源总数,数据源排序,共多少页。基本好像就这些。如果数据考虑到增删操作的话,分页就复杂一些。注意加访问的权限。

0、效果图

这里写图片描述

1、权限

 <uses-permission android:name="android.permission.READ_CONTACTS" />

2、获取联系人总数

 public int getAllPhoneNums() {int num = 0;Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;String[] projection = {ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.DATA1,ContactsContract.CommonDataKinds.Phone.CONTACT_ID};Cursor cursor = mContext.getContentResolver().query(uri, projection, null, null, null);if (null != cursor) {num = cursor.getCount();cursor.close();}return num;}

3、分页加载数据

/*** 分页查询系统联系人信息** @param pageSize 每页最大的数目* @param page     页数* @return*/public Page<List<ContactsPerson>> getContactsByPage(int pageSize, int page) {Page<List<ContactsPerson>> tempPage = new Page<>();tempPage.data = new ArrayList<ContactsPerson>();Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;String[] projection = {ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,ContactsContract.CommonDataKinds.Phone.DATA1, ContactsContract.CommonDataKinds.Phone.CONTACT_ID};tempPage.count = getAllPhoneNums();tempPage.pages = tempPage.count / pageSize + (tempPage.count % pageSize == 0 ? 0 : 1);if (page < 1) {page = 1;} else if (page > tempPage.pages) {page = tempPage.pages;}tempPage.page = page;tempPage.limit = pageSize <= 0 ? 10 : pageSize;int currentOffset = (tempPage.page - 1) * tempPage.limit;Cursor cursor = mContext.getContentResolver().query(uri, projection, null, null, ContactsContract.Contacts._ID + " ASC limit " + pageSize + " offset " + currentOffset);if (cursor != null) {while (cursor.moveToNext()) {ContactsPerson info = new ContactsPerson();info.setName(cursor.getString(0));info.setPhoneNumber(cursor.getString(1));info.setId(cursor.getLong(2));info.setHeadUrl(ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, info.getId()).toString());tempPage.data.add(info);Log.e("ContactsPerson: ", info.toString());info = null;}Log.e("ContactsPerson: ", tempPage.toString());cursor.close();}return tempPage;}

以上贴的是部分核心代码。完整Demo请点击。

这篇关于Android 分页加载联系人的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1138857

相关文章

Android实现悬浮按钮功能

《Android实现悬浮按钮功能》在很多场景中,我们希望在应用或系统任意界面上都能看到一个小的“悬浮按钮”(FloatingButton),用来快速启动工具、展示未读信息或快捷操作,所以本文给大家介绍... 目录一、项目概述二、相关技术知识三、实现思路四、整合代码4.1 Java 代码(MainActivi

Android Mainline基础简介

《AndroidMainline基础简介》AndroidMainline是通过模块化更新Android核心组件的框架,可能提高安全性,本文给大家介绍AndroidMainline基础简介,感兴趣的朋... 目录关键要点什么是 android Mainline?Android Mainline 的工作原理关键

如何解决idea的Module:‘:app‘platform‘android-32‘not found.问题

《如何解决idea的Module:‘:app‘platform‘android-32‘notfound.问题》:本文主要介绍如何解决idea的Module:‘:app‘platform‘andr... 目录idea的Module:‘:app‘pwww.chinasem.cnlatform‘android-32

Android实现打开本地pdf文件的两种方式

《Android实现打开本地pdf文件的两种方式》在现代应用中,PDF格式因其跨平台、稳定性好、展示内容一致等特点,在Android平台上,如何高效地打开本地PDF文件,不仅关系到用户体验,也直接影响... 目录一、项目概述二、相关知识2.1 PDF文件基本概述2.2 android 文件访问与存储权限2.

Android Studio 配置国内镜像源的实现步骤

《AndroidStudio配置国内镜像源的实现步骤》本文主要介绍了AndroidStudio配置国内镜像源的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、修改 hosts,解决 SDK 下载失败的问题二、修改 gradle 地址,解决 gradle

在Android平台上实现消息推送功能

《在Android平台上实现消息推送功能》随着移动互联网应用的飞速发展,消息推送已成为移动应用中不可或缺的功能,在Android平台上,实现消息推送涉及到服务端的消息发送、客户端的消息接收、通知渠道(... 目录一、项目概述二、相关知识介绍2.1 消息推送的基本原理2.2 Firebase Cloud Me

Android中Dialog的使用详解

《Android中Dialog的使用详解》Dialog(对话框)是Android中常用的UI组件,用于临时显示重要信息或获取用户输入,本文给大家介绍Android中Dialog的使用,感兴趣的朋友一起... 目录android中Dialog的使用详解1. 基本Dialog类型1.1 AlertDialog(

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

Android自定义Scrollbar的两种实现方式

《Android自定义Scrollbar的两种实现方式》本文介绍两种实现自定义滚动条的方法,分别通过ItemDecoration方案和独立View方案实现滚动条定制化,文章通过代码示例讲解的非常详细,... 目录方案一:ItemDecoration实现(推荐用于RecyclerView)实现原理完整代码实现