网络资源模板--Android Studio 通讯录App
目录
一、项目演示
二、项目测试环境
三、项目详情
四、完整的项目源码
一、项目演示
网络资源模板--基于Android studio 通讯录
二、项目测试环境

三、项目详情
首页

`MainActivity` 类是一个 Android 地址簿应用的核心部分,负责管理联系人列表的显示、搜索和添加功能。以下是其主要功能的总结:
1. **数据库初始化**:在 `onCreate` 方法中,应用程序初始化数据库,通过 `DBUntil` 类获取可写数据库实例。
2. **联系人列表显示**:
- 通过 `PeoDao.getAllPeo()` 方法获取所有联系人,并使用 `ListView` 显示。
- 如果联系人列表为空,`ListView` 不显示任何内容。
- 联系人按照首字母进行排序,特殊字符(如 `#`)排在最后。
3. **添加新联系人**:应用提供了一个 `FloatingActionButton`,用户点击后会跳转到 `AddActivity` 界面,允许用户添加新联系人。
4. **实时搜索功能**:
- 应用支持通过输入框(`EditText`)进行搜索,用户输入的内容会实时更新联系人列表。
- 使用 `TextWatcher` 监听输入框内容变化,在每次文本变化后,更新 `ListView` 的适配器以显示匹配的联系人。
- 如果输入框为空,则重新加载所有联系人。
5. **适配器**:使用自定义的 `PeoAdapter` 来管理 `ListView` 中联系人的显示。
整体来说,`MainActivity` 类提供了一个基本的联系人管理界面,支持添加、显示和搜索联系人。
if (result.size() == 0) {listView.setAdapter((ListAdapter) null);} else {result.sort(new Comparator<PeoBean>() {public int compare(PeoBean peoBean, PeoBean t1) {if (peoBean.getBeginZ().equals("#") || t1.getBeginZ().equals("#")) {return 1;}return peoBean.getBeginZ().compareTo(t1.getBeginZ());}});listView.setAdapter((ListAdapter) new PeoAdapter(this, result));}((FloatingActionButton) findViewById(R.id.add)).setOnClickListener(v -> {MainActivity.this.startActivity(new Intent(MainActivity.this, AddActivity.class));});
添加页面

`AddActivity` 类是一个用于添加新联系人的界面,具备输入和保存联系人的功能。以下是其主要功能的总结:
1. **界面布局**:在 `onCreate` 方法中,设置活动的视图布局为 `activity_add`,并初始化 UI 组件。
2. **工具栏设置**:工具栏 (`Toolbar`) 被设置为点击后结束当前活动,返回到上一界面。
3. **输入字段**:
- 提供 `TextView` 组件用于输入姓名、手机号和备注。
- 使用两个 `RadioButton` 选择性别,默认选择“男”。
4. **添加联系人按钮**:
- 通过 `Button` 组件触发保存联系人操作。
- 输入字段的值在点击按钮时被验证:
- 如果姓名、手机号或备注为空,显示相应的提示信息(使用 `Toast`)。
- 如果所有字段均填写,获取性别信息并调用 `PeoDao.savePeo()` 方法将联系人信息保存到数据库。
5. **成功提示**:在成功添加联系人后,使用 `Toast` 提示用户“添加成功”。
总之,`AddActivity` 提供了一个简洁的用户界面,用于输入和保存新的联系人信息,并通过输入验证确保数据完整性。
((Button) findViewById(R.id.add_button)).setOnClickListener(v -> {String nameT = name.getText().toString().trim();String phoneT = phone.getText().toString().trim();String bzT = bz.getText().toString().trim();if (nameT.isEmpty()) {Toast.makeText(AddActivity.this, "请输入姓名", Toast.LENGTH_SHORT).show();} else if (phoneT.isEmpty()) {Toast.makeText(AddActivity.this, "请输入手机号", Toast.LENGTH_SHORT).show();} else if (bzT.isEmpty()) {Toast.makeText(AddActivity.this, "请输入备注", Toast.LENGTH_SHORT).show();} else {String sex = "女";if (man.isChecked()) {sex = "男";}PeoDao.savePeo(nameT, phoneT, sex, bzT);Toast.makeText(AddActivity.this, "添加成功", Toast.LENGTH_SHORT).show();}});
详情页

`DetailsActivity` 类用于显示和管理特定联系人的详细信息,包括拨打电话、发送短信、更新和删除联系人。以下是其主要功能的总结:
1. **界面布局**:在 `onCreate` 方法中,设置活动的视图布局为 `activity_details`,并获取传递的联系人 ID。
2. **显示联系人信息**:
- 通过 `PeoDao.getOnePeo(id)` 方法获取联系人信息,并在界面上显示姓名、手机号、性别和备注。
- 根据性别显示相应的头像(男性或女性)。
3. **拨打电话**:
- 为拨打电话的按钮设置点击监听器,检查是否有拨打电话的权限。
- 如果有权限,调用 `makePhoneCall()` 方法执行电话拨打;如果没有权限,申请权限。
4. **发送短信**:
- 提供按钮以发送短信,点击后创建一个短信发送的意图,并传入目标手机号。
5. **返回和删除功能**:
- 提供返回按钮,点击后返回主界面(`MainActivity`)。
- 提供删除按钮,点击后调用 `PeoDao.delPeo(id)` 删除联系人,并显示删除成功的提示,然后返回主界面。
6. **更新联系人**:
- 提供更新按钮,点击后跳转到 `UpdateActivity` 并传递联系人 ID,以便更新其信息。
总之,`DetailsActivity` 类为用户提供了一个全面的界面来查看和管理单个联系人的详细信息,支持拨打电话、发送短信、更新和删除操作。
((Button) findViewById(R.id.de_da_message)).setOnClickListener(v -> {Intent intent = new Intent("android.intent.action.SENDTO");intent.setData(Uri.parse("smsto:" + Uri.encode(num.getText().toString().trim())));DetailsActivity.this.startActivity(intent);});((Button) findViewById(R.id.de_back)).setOnClickListener(v -> {DetailsActivity.this.startActivity(new Intent(DetailsActivity.this, MainActivity.class));});((Button) findViewById(R.id.de_del)).setOnClickListener(v -> {PeoDao.delPeo(id);Toast.makeText(DetailsActivity.this, "删除成功", Toast.LENGTH_SHORT).show();DetailsActivity.this.startActivity(new Intent(DetailsActivity.this, MainActivity.class));});((Button) findViewById(R.id.de_up)).setOnClickListener(v -> {Intent intent = new Intent(DetailsActivity.this, UpdateActivity.class);intent.putExtra("id", id);DetailsActivity.this.startActivity(intent);});
修改页面

`UpdateActivity` 类用于更新已存在联系人的信息,提供了用户界面来修改姓名、手机号、性别和备注。以下是其主要功能的总结:
1. **界面布局**:在 `onCreate` 方法中,设置活动的视图布局为 `activity_update`,并初始化 UI 组件。
2. **工具栏设置**:点击工具栏可以结束当前活动,返回上一个界面。
3. **获取和显示现有信息**:
- 通过 `getIntent().getStringExtra("id")` 获取联系人 ID,并通过 `PeoDao.getOnePeo(id)` 获取对应的联系人信息。
- 将现有信息填充到相应的输入字段(姓名、手机号、性别和备注)。
4. **性别选择**:根据获取的性别信息设置相应的 `RadioButton` 为选中状态(男或女)。
5. **更新按钮**:
- 为更新按钮设置点击监听器,在点击时进行输入验证:
- 检查姓名、手机号和备注是否为空,并通过 `Toast` 提示用户。
- 如果输入有效,获取性别信息,并调用 `PeoDao.updatePeo()` 方法更新联系人信息。
6. **成功提示**:在更新成功后,使用 `Toast` 提示用户“更改成功”。
总之,`UpdateActivity` 提供了一个简洁的用户界面,使用户能够方便地更新联系人的详细信息,并通过输入验证确保数据的完整性。
((Button) findViewById(R.id.up_button)).setOnClickListener(v -> {String nameT = name.getText().toString().trim();String phoneT = phone.getText().toString().trim();String bzT = bz.getText().toString().trim();if (nameT.isEmpty()) {Toast.makeText(UpdateActivity.this, "请输入姓名", Toast.LENGTH_SHORT).show();} else if (phoneT.isEmpty()) {Toast.makeText(UpdateActivity.this, "请输入手机号", Toast.LENGTH_SHORT).show();} else if (bzT.isEmpty()) {Toast.makeText(UpdateActivity.this, "请输入备注", Toast.LENGTH_SHORT).show();} else {String sex = "女";if (man.isChecked()) {sex = "男";}PeoDao.updatePeo(nameT, phoneT, sex, bzT, id);Toast.makeText(UpdateActivity.this, "更改成功", Toast.LENGTH_SHORT).show();}});
拨打电话和发短信效果页面


四、完整的项目源码
👇👇👇👇👇快捷获取方式👇👇👇👇👇
相关文章:
网络资源模板--Android Studio 通讯录App
目录 一、项目演示 二、项目测试环境 三、项目详情 四、完整的项目源码 一、项目演示 网络资源模板--基于Android studio 通讯录 二、项目测试环境 三、项目详情 首页 MainActivity 类是一个 Android 地址簿应用的核心部分,负责管理联系人列表的显示、搜索和添…...
Spring 出现 No qualifying bean of type ‘com.xxx‘ available 解决方法
目录 1. 问题所示2. 原理分析3. 解决方法4. 彩蛋4.1 bug彩蛋4.2 完整Demo4.3 补充Springboot1. 问题所示 出现如下问题: 19:58:23.476 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean o…...
C# 批量更改文件后缀名称
解决问题思路 解决固定文件夹下更改文件后缀名,采用轮询的方式, 流程如下: 获取当前文件名(带后缀的文件名)截取文件名称,去掉后缀另存为带更改后的后缀文件 注意:采用第三方插件࿰…...
KIC算法介绍及pyrosetta示例代码
Kinetic Loop Closure (KIC) 是 Rosetta 中一种重要的环区(loop region)建模算法,主要用于解决蛋白质中的柔性区域(特别是环区)的重构问题。环区是蛋白质中非常灵活的部分,通常结构不确定。KIC 算法采用基于运动学的解决方案,通过设置特定的几何约束,能够在给定的两端锚…...
【论文串烧】多媒体推荐中的模态平衡学习 | 音视频语音识别中丢失导致的模态偏差对丢失视频帧鲁棒性的影响
文章目录 一、多媒体推荐中的模态平衡学习1.1 研究背景1.2 解决问题1.3 实施方案1.4 文章摘要1.5 文章重点1.6 文章图示图 1:不同模型变体在 AmazonClothing 数据集上的初步研究图 2:CKD模型架构的说明图 3:在 Amazon-Clothing 数据集上训练过…...
【C语言二级考试】循环结构设计
C语言二级考试——循环结构程序设计 五.循环结构程序设计 1.for循环结构 2.while和do-while循环结构 3.continue语句和break语句 4.循环的嵌套 知识点参考【C语言】循环-CSDN博客 文章目录 1.for循环2.while和do-while循环结构3.continue语句和break语句4.循环的嵌套 1.for循环…...
诗文发布模板(python代码打造键盘录入诗文自动排版,MarkDown源码文本)
python最好用的f-string,少量代码打造键盘录入诗文自动排版。 (笔记模板由python脚本于2024年09月19日 19:11:50创建,本篇笔记适合喜欢写诗的pythoner的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free&am…...
GO主流开源框架
GO主流开源框架 Go 语言有着丰富的开源框架生态,涵盖了多种应用场景,如 Web 开发、数据库操作、微服务、日志处理等。以下是一些常见的 Go 框架及其典型作用场景: 1. Web 框架 Gin: 作用:一个高性能的轻量级 Web 框架ÿ…...
LeetCode:2398. 预算内的最多机器人数目 双指针+单调队列,时间复杂度O(n)
2398. 预算内的最多机器人数目 today 2398. 预算内的最多机器人数目 题目描述 你有 n 个机器人,给你两个下标从0开始的整数数组 chargeTimes 和 runningCosts ,两者长度都为 n 。第 i 个机器人充电时间为 chargeTimes[i] 单位时间,花费 ru…...
oracle 插入date日期类型的数据、插入从表中查出的数据,使用表中的默认数据
date sysdate to_date 插入从表中查出的数据 方式一 方式二 或者指定列名称 下边这个案例的前提是指定列插入,如果不指定,则也是默认的...
物流系统打单软件 佳易王物流运单怎么打印教程
一、前言 物流系统打单软件 佳易王物流运单怎么打印教程 1、佳易王物流管理系统可同时打印物流单和标签 2、如果一台电脑上有多台打印机,软件可以设置物流或标签对应的打印机,系统自动识别打印机。 二、软件程序图文说明 1、上图为 物流单在空白单上打…...
二叉树计算
题目描述 给出一个二叉树,请由该二叉树生成一个新的二叉树,它满足其树中的每个节点将包含原始树中的左子树和右子树的和。左子树表示该节点左侧叶子节点为根节点的一颗新树;右子树表示该节点右侧叶子节点为根节点的一颗新树。 输入描述 2行整数&#…...
Java并发执行举例
在Java中实现并发执行可以通过多种方式,最常见的方式包括使用线程、ExecutorService、ForkJoinPool等。以下是几种常用并发执行的示例: 1. 使用Thread类 这是Java中最基础的并发实现,通过创建一个继承自Thread的类或实现Runnable接口来定义…...
Java 基础知识九(网络编程)
UDP DatagramSocket:通讯的数据管道 -send 和receive方法 -(可选,多网卡)绑定一个IP和Port DatagramPacket -集装箱:封装数据 -地址标签:目的地IPPort package org.example.net;import java.net.DatagramPacket; import java.net.DatagramSocket; import java.n…...
深入解析Go语言的类型方法、接口与反射
解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 Go语言作为一门现代编程语言,以其简洁高效的特性受到广大开发者的喜爱。在本文中,我们将深入探讨Go语言中的类型方法、接口和反射机制。通过丰富的代码示例和详尽的解释,帮助您全面理解这些关键概念,并在实际…...
C#中线程池【异步】
在 WinForm 项目中,线程池中的线程主要用于执行异步和并发任务。当你调用某些异步方法或使用并行编程时,线程池中的线程就会被使用。 在以下场景中,线程池的线程会被使用: 使用场景 异步任务执行 当你使用 Task.Run() 或 TaskF…...
OpenAI 刚刚推出 o1 大模型!!突破LLM极限
北京时间 9 月 13 日午夜,OpenAI 正式发布了一系列全新的 AI 大模型,专门用于应对复杂问题。 这一新模型的出现代表了一个重要突破,其具备的复杂推理能力远远超过了以往用于科学、代码和数学等领域的通用模型,能够解决比之前更难的…...
【Vmware16安装教程】
📖Vmware16安装教程 ✅1.下载✅2.安装 ✅1.下载 官网地址:https://www.vmware.com/ 百度云盘:Vmware16下载 123云盘:Vmware16下载 ✅2.安装 1.双击安装包VMware-workstation-full-16.1.0-LinuxProbe.Com.exe,点击…...
Delphi5利用DLL实现窗体的重用
文章目录 效果图参考利用DLL实现窗体的重用步骤1 设计出理想窗体步骤2 编写一个用户输出的函数或过程,在其中对窗体进行创建使它实例化步骤3 对工程文件进行相应的修改以适应DLL格式的需要步骤4 编译工程文件生成DLL文件步骤5 在需要该窗体的其他应用程序中重用该窗…...
使用JavaWeb开发注册功能时,校验用户名是否已存在的一个思路(附代码)
在开发 Web 应用程序时,用户注册是一个常见的功能。为了确保每个用户都有一个唯一的用户名,我们需要在用户注册时检查数据库中是否已经存在该用户名。本文将详细介绍如何在 Servlet 中使用 JDBC 技术来检查用户名是否存在。 1. JDBC 简介 Java Databas…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...
