news 2026/9/2 13:13:20

手持机安卓新增推送按钮功能

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
手持机安卓新增推送按钮功能

完整的数据流程故事

第一幕:用户配置推送地址(设置页面)

用户打开"设置"页面 ↓ 看到"推送地址"输入框 (fragment_settings.xml 定义的界面) ↓ 输入: http://192.168.2.5:8080/api/tags ↓ 点击"保存"按钮 (button_save_push_url) ↓ 触发 SettingsFragment.savePushUrl() 方法 ↓ 调用 SharedUtil.savePushUrl(url) 保存到手机本地 ↓ 显示"设置成功"

关键文件关系:

fragment_settings.xml → 定义界面长什么样
SettingsFragment.java → 处理保存按钮点击事件
SharedUtil.java → 把URL存到手机里(类似存到一个小本本)

第二幕:用户盘存标签(盘存页面)

用户打开"盘存"页面 ↓ 点击"开始盘存"按钮,扫描RFID标签 ↓ 扫到了10个标签,数据存在 tagInfoList 里 [ {epc: "E200123...", count: 5}, {epc: "E200456...", count: 3}, ... ] ↓ 用户看到界面显示:标签数量10个

这时候数据还在手机内存里,没发送出去

第三幕:推送数据到服务器(核心流程)

用户点击"推送"按钮 (button_push) ↓ 触发 InventoryFragment.pushData() 方法 ↓ 第1步:检查有没有数据 if (tagInfoList.size() == 0) → 提示"No Data" ↓ 第2步:读取之前保存的推送地址 调用 SharedUtil.getPushUrl() → 返回 "http://192.168.2.5:8080/api/tags" ↓ 第3步:调用HTTP工具发送数据 HttpUtil.pushTagData(url, tagInfoList, callback) ↓ ┌─────────────────────────────────┐ │ HttpUtil 内部做了什么? │ │ 1. 开启新线程(不阻塞界面) │ │ 2. 把 tagInfoList 转成 JSON │ │ [{epc:"E200...", count:5}...]│ │ 3. 发送 HTTP POST 请求 │ │ 4. 等待服务器响应 │ │ 5. 回调结果到主线程 │ └─────────────────────────────────┘ ↓ 第4步:显示结果 成功 → 显示"Push success" 失败 → 显示"Push failed: 错误信息"

文件之间的依赖关系图

┌─────────────────────────────────────────────────────┐
│ 用户界面层 │
├─────────────────────────────────────────────────────┤
│ │
│ fragment_inventory.xml ←→ InventoryFragment.java│
│ (盘存页面布局) (盘存页面逻辑) │
│ - 推送按钮 - pushData()方法 │
│ - tagInfoList数据 │
│ │
│ fragment_settings.xml ←→ SettingsFragment.java │
│ (设置页面布局) (设置页面逻辑) │
│ - URL输入框 - savePushUrl() │
│ │
└──────────────┬──────────────────────┬───────────────┘
│ │
↓ ↓
┌──────────────────────────┐ ┌──────────────────┐
│ 工具类层 │ │ 数据存储层 │
├──────────────────────────┤ ├──────────────────┤
│ HttpUtil.java │ │ SharedUtil.java │
│ - pushTagData() │ │ - savePushUrl() │
│ - 转JSON │ │ - getPushUrl() │
│ - 发HTTP请求 │ │ (存/读配置) │
└──────────────────────────┘ └──────────────────┘


┌──────────────────────────┐
│ 后端服务器 │
│ 192.168.2.5:8080 │
│ /api/tags │
└──────────────────────────┘

用代码调用链来理解

场景1:保存推送地址

// 1. 用户在设置页面输入URL并点保存 SettingsFragment.savePushUrl() { String url = editTextPushUrl.getText(); // "http://192.168.2.5:8080/api/tags" // 2. 调用工具类保存 sharedUtil.savePushUrl(url); } // 3. SharedUtil把URL存到手机 SharedUtil.savePushUrl(url) { mSharedPreferences.edit() .putString("pushUrl", url) // 存到本地 .apply(); }

场景2:推送数据

// 1. 用户在盘存页面点推送按钮 InventoryFragment.pushData() { // 2. 读取之前保存的URL String url = sharedUtil.getPushUrl(); // "http://192.168.2.5:8080/api/tags" // 3. 调用HTTP工具发送数据 HttpUtil.pushTagData(url, tagInfoList, new HttpCallback() { onSuccess() { 显示"成功" } onError() { 显示"失败" } }); } // 4. HttpUtil发送HTTP请求 HttpUtil.pushTagData(url, tagInfoList, callback) { new Thread(() -> { // 5. 转JSON JSONArray json = 把tagInfoList转成JSON; // 6. 发POST请求 HttpURLConnection conn = 连接到url; conn.发送(json); // 7. 读响应 int code = conn.getResponseCode(); // 8. 回调结果 if (code == 200) { callback.onSuccess(); } else { callback.onError(); } }).start(); }

简单总结

3个核心角色:

SettingsFragment + SharedUtil = 配置管理员

负责让用户输入URL并保存起来
InventoryFragment + tagInfoList = 数据收集员

负责收集盘存的标签数据
HttpUtil = 快递员

负责把数据打包成JSON,送到服务器
它们的关系:

InventoryFragment 问 SharedUtil:“推送地址是啥?”
SharedUtil 回答:“http://192.168.2.5:8080/api/tags”
InventoryFragment 对 HttpUtil 说:“把这些数据送到这个地址”
HttpUtil 执行任务,完成后告诉 InventoryFragment:"送达了!“或"失败了!”

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 15:07:39

LobeChat能否支持百度文心一言?API适配层设计思路

LobeChat能否支持百度文心一言?API适配层设计思路 在国产大模型加速落地的今天,越来越多开发者面临一个现实问题:如何让开源聊天框架无缝对接像百度文心一言这样的本土化AI服务?尤其是在企业级应用中,既要保障中文语义…

作者头像 李华
网站建设 2026/9/2 11:30:16

Git Hook应用实例:提交PyTorch代码前自动格式化

Git Hook应用实例:提交PyTorch代码前自动格式化 在深度学习项目日益复杂的今天,一个常见的场景是:团队成员刚提交完一段模型训练代码,CI流水线却因“缺少空格”或“import顺序错误”而失败。这样的问题看似微不足道,但…

作者头像 李华
网站建设 2026/8/31 14:04:46

【学习笔记】Mega-TTS:基于内在归纳偏置的大规模零样本文本到语音合成技术解析

一、研究背景与核心动机 文本到语音合成(TTS)技术旨在将文本转化为自然流畅的人类语音,是人机交互、内容创作等领域的核心支撑技术。近年来,大规模数据驱动的TTS系统凭借强大的泛化能力,在零样本场景(即对未参与训练的说话人、语言或领域进行语音合成)中取得了突破性进…

作者头像 李华
网站建设 2026/9/1 19:23:21

避免入行即入坑:网络安全新手的科学学习路径与实战避坑指南

网络安全是一个庞大而不断发展的领域,它包含多个专业领域,如网络防御、网络攻击、数据加密等。介绍网络安全的基本概念、技术和工具,逐步深入,帮助您成为一名合格的网络安全从业人员。 一、网络安全概念与重要性 理解网络安全的定…

作者头像 李华
网站建设 2026/9/2 18:24:33

0基础转网安:从考证、实战到拿下第一份offer的完整指南

今天,有个朋友问我,如果要转入安全行业好就业吗?工资真的很高吗?网络安全作为近两年兴起的热门行业,成了很多就业无门但是想转行的人心中比较向往但是又心存疑惑的行业,毕竟网络安全的发展史比较短&#xf…

作者头像 李华
网站建设 2026/9/1 21:23:31

如何正确入行网络安全(非常详细)从零基础入门到精通

网络安全是一个庞大而不断发展的领域,它包含多个专业领域,如网络防御、网络攻击、数据加密等。介绍网络安全的基本概念、技术和工具,逐步深入,帮助您成为一名合格的网络安全从业人员。 一、网络安全概念与重要性 理解网络安全的定…

作者头像 李华