实现Android获取并展示联系人信息
在Android开发中,"读取手机联系人"是常见的功能需求,通常涉及到数据库查询和用户界面展示。本文档中的代码片段展示了如何在一款名为"callandroid"的应用中实现这一功能。主活动类`MainActivity`继承自`Activity`,主要涉及以下几个关键知识点: 1. **包导入与依赖**: - `com.example.callandroid`: 这是应用的包名,表明这段代码属于该应用的一部分。 2. **数据结构**: - `User` 类:这可能是定义的一个用户实体类,用于存储联系人信息,如电话号码、姓名等。 - `list`: 一个空的 `ArrayList<User>`,用于存储从数据库检索到的联系人列表。 3. **布局管理**: - 在`onCreate()`方法中,两次调用`setContentView()`,这可能是代码编写时的误操作,应删除其中一个,只保留第一次设置布局的语句,以避免重复。 4. **ListView的设置**: - `ListView lv` 是一个用于显示联系人的视图组件,通过`findViewById()`获取并设置其适配器。 - `MyAdapter`:这应该是一个自定义的适配器类,用于将数据库查询结果转换为`ListView`可显示的项目。 5. **查询数据库**: - 使用`Uri.parse()`构建一个指向联系人数据库的URI:`Uri uri = Uri.parse("content://com.android.contacts/contacts")`。 - 使用`getContentResolver().query()`方法执行SQL查询,传入需要的列(如 `_id`)和查询条件(null),返回一个`Cursor`对象。 - 遍历`Cursor`,对每一项数据创建一个新的`User`实例,并添加到`list`中。 6. **递归查询**: - 对于每个查询到的联系人,进一步通过`Uri uri1`进行子查询,获取更详细的数据,如联系人数据详情。这部分代码缺失了完整的查询语句,但可以推测是类似的操作。 7. **异常处理与性能优化**: - 由于使用了`Cursor`,开发者需要注意正确关闭游标以释放系统资源,防止内存泄漏。 8. **菜单与权限**: - 如果这个Activity需要访问联系人数据,可能需要在AndroidManifest.xml中请求`READ_CONTACTS`权限。 总结起来,这段代码展示了如何在Android应用中利用ContentProvider API(联系人系统的API)查询联系人信息,并将其展示在ListView上。对于实际项目,还需要完善异常处理、适配器实现以及必要的权限请求。同时,如果有多张表或复杂查询,可能需要使用`JOIN`操作来获取完整的信息。
import java.util.ArrayList;
import java.util.List;
import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.database.Cursor;
import android.view.Menu;
import android.widget.ListView;
public class MainActivity extends Activity {
List<User> list = null;
User u = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setContentView(R.layout.activity_main);
ListView lv = (ListView) this.findViewById(R.id.listView1);
lv.setAdapter(new MyAdapter(this, this.getContacts()));
}
// 获得联系人
public List getContacts() {
// 获得联系人的Uri
下载后可阅读完整内容,剩余2页未读,立即下载
- 粉丝: 0
- 资源: 3
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 李兴华Java基础教程:从入门到精通
- U盘与硬盘启动安装教程:从菜鸟到专家
- C++面试宝典:动态内存管理与继承解析
- C++ STL源码深度解析:专家级剖析与关键技术
- C/C++调用DOS命令实战指南
- 神经网络补偿的多传感器航迹融合技术
- GIS中的大地坐标系与椭球体解析
- 海思Hi3515 H.264编解码处理器用户手册
- Oracle基础练习题与解答
- 谷歌地球3D建筑筛选新流程详解
- CFO与CIO携手:数据管理与企业增值的战略
- Eclipse IDE基础教程:从入门到精通
- Shell脚本专家宝典:全面学习与资源指南
- Tomcat安装指南:附带JDK配置步骤
- NA3003A电子水准仪数据格式解析与转换研究
- 自动化专业英语词汇精华:必备术语集锦