2026/6/10 19:33:17
网站建设
项目流程
网站设计定制,网站做优化按点击收费,网站中弹出广告怎么做,生意网官方网站完整的数据流程故事
第一幕#xff1a;用户配置推送地址#xff08;设置页面#xff09;
用户打开设置页面↓
看到推送地址输入框 (fragment_settings.xml 定义的界面)↓
输入: http://192.168.2.5:8080/api/tags↓
点击保存按钮 (butt…完整的数据流程故事第一幕用户配置推送地址设置页面用户打开设置页面 ↓ 看到推送地址输入框 (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送达了“或失败了”