当前位置: 首页 > news >正文

网络资源模板--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 地址簿应用的核心部分&#xff0c;负责管理联系人列表的显示、搜索和添…...

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# 批量更改文件后缀名称

解决问题思路 解决固定文件夹下更改文件后缀名&#xff0c;采用轮询的方式&#xff0c; 流程如下&#xff1a; 获取当前文件名&#xff08;带后缀的文件名&#xff09;截取文件名称&#xff0c;去掉后缀另存为带更改后的后缀文件 注意&#xff1a;采用第三方插件&#xff0…...

KIC算法介绍及pyrosetta示例代码

Kinetic Loop Closure (KIC) 是 Rosetta 中一种重要的环区(loop region)建模算法,主要用于解决蛋白质中的柔性区域(特别是环区)的重构问题。环区是蛋白质中非常灵活的部分,通常结构不确定。KIC 算法采用基于运动学的解决方案,通过设置特定的几何约束,能够在给定的两端锚…...

【论文串烧】多媒体推荐中的模态平衡学习 | 音视频语音识别中丢失导致的模态偏差对丢失视频帧鲁棒性的影响

文章目录 一、多媒体推荐中的模态平衡学习1.1 研究背景1.2 解决问题1.3 实施方案1.4 文章摘要1.5 文章重点1.6 文章图示图 1&#xff1a;不同模型变体在 AmazonClothing 数据集上的初步研究图 2&#xff1a;CKD模型架构的说明图 3&#xff1a;在 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&#xff0c;少量代码打造键盘录入诗文自动排版。 (笔记模板由python脚本于2024年09月19日 19:11:50创建&#xff0c;本篇笔记适合喜欢写诗的pythoner的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&am…...

GO主流开源框架

GO主流开源框架 Go 语言有着丰富的开源框架生态&#xff0c;涵盖了多种应用场景&#xff0c;如 Web 开发、数据库操作、微服务、日志处理等。以下是一些常见的 Go 框架及其典型作用场景&#xff1a; 1. Web 框架 Gin: 作用&#xff1a;一个高性能的轻量级 Web 框架&#xff…...

LeetCode:2398. 预算内的最多机器人数目 双指针+单调队列,时间复杂度O(n)

2398. 预算内的最多机器人数目 today 2398. 预算内的最多机器人数目 题目描述 你有 n 个机器人&#xff0c;给你两个下标从0开始的整数数组 chargeTimes 和 runningCosts &#xff0c;两者长度都为 n 。第 i 个机器人充电时间为 chargeTimes[i] 单位时间&#xff0c;花费 ru…...

oracle 插入date日期类型的数据、插入从表中查出的数据,使用表中的默认数据

date sysdate to_date 插入从表中查出的数据 方式一 方式二 或者指定列名称 下边这个案例的前提是指定列插入&#xff0c;如果不指定&#xff0c;则也是默认的...

物流系统打单软件 佳易王物流运单怎么打印教程

一、前言 物流系统打单软件 佳易王物流运单怎么打印教程 1、佳易王物流管理系统可同时打印物流单和标签 2、如果一台电脑上有多台打印机&#xff0c;软件可以设置物流或标签对应的打印机&#xff0c;系统自动识别打印机。 二、软件程序图文说明 1、上图为 物流单在空白单上打…...

二叉树计算

题目描述 给出一个二叉树&#xff0c;请由该二叉树生成一个新的二叉树&#xff0c;它满足其树中的每个节点将包含原始树中的左子树和右子树的和。左子树表示该节点左侧叶子节点为根节点的一颗新树;右子树表示该节点右侧叶子节点为根节点的一颗新树。 输入描述 2行整数&#…...

Java并发执行举例

在Java中实现并发执行可以通过多种方式&#xff0c;最常见的方式包括使用线程、ExecutorService、ForkJoinPool等。以下是几种常用并发执行的示例&#xff1a; 1. 使用Thread类 这是Java中最基础的并发实现&#xff0c;通过创建一个继承自Thread的类或实现Runnable接口来定义…...

Java 基础知识九(网络编程)

UDP DatagramSocket:通讯的数据管道 -send 和receive方法 -(可选&#xff0c;多网卡)绑定一个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 项目中&#xff0c;线程池中的线程主要用于执行异步和并发任务。当你调用某些异步方法或使用并行编程时&#xff0c;线程池中的线程就会被使用。 在以下场景中&#xff0c;线程池的线程会被使用&#xff1a; 使用场景 异步任务执行 当你使用 Task.Run() 或 TaskF…...

OpenAI 刚刚推出 o1 大模型!!突破LLM极限

北京时间 9 月 13 日午夜&#xff0c;OpenAI 正式发布了一系列全新的 AI 大模型&#xff0c;专门用于应对复杂问题。 这一新模型的出现代表了一个重要突破&#xff0c;其具备的复杂推理能力远远超过了以往用于科学、代码和数学等领域的通用模型&#xff0c;能够解决比之前更难的…...

【Vmware16安装教程】

&#x1f4d6;Vmware16安装教程 ✅1.下载✅2.安装 ✅1.下载 官网地址&#xff1a;https://www.vmware.com/ 百度云盘&#xff1a;Vmware16下载 123云盘&#xff1a;Vmware16下载 ✅2.安装 1.双击安装包VMware-workstation-full-16.1.0-LinuxProbe.Com.exe&#xff0c;点击…...

Delphi5利用DLL实现窗体的重用

文章目录 效果图参考利用DLL实现窗体的重用步骤1 设计出理想窗体步骤2 编写一个用户输出的函数或过程&#xff0c;在其中对窗体进行创建使它实例化步骤3 对工程文件进行相应的修改以适应DLL格式的需要步骤4 编译工程文件生成DLL文件步骤5 在需要该窗体的其他应用程序中重用该窗…...

使用JavaWeb开发注册功能时,校验用户名是否已存在的一个思路(附代码)

在开发 Web 应用程序时&#xff0c;用户注册是一个常见的功能。为了确保每个用户都有一个唯一的用户名&#xff0c;我们需要在用户注册时检查数据库中是否已经存在该用户名。本文将详细介绍如何在 Servlet 中使用 JDBC 技术来检查用户名是否存在。 1. JDBC 简介 Java Databas…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

XCTF-web-easyupload

试了试php&#xff0c;php7&#xff0c;pht&#xff0c;phtml等&#xff0c;都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接&#xff0c;得到flag...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

【kafka】Golang实现分布式Masscan任务调度系统

要求&#xff1a; 输出两个程序&#xff0c;一个命令行程序&#xff08;命令行参数用flag&#xff09;和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽&#xff0c;然后将消息推送到kafka里面。 服务端程序&#xff1a; 从kafka消费者接收…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...

MySQL 部分重点知识篇

一、数据库对象 1. 主键 定义 &#xff1a;主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 &#xff1a;确保数据的完整性&#xff0c;便于数据的查询和管理。 示例 &#xff1a;在学生信息表中&#xff0c;学号可以作为主键&#xff…...

Modbus RTU与Modbus TCP详解指南

目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...