uniApp离线数据不丢失方案

1. 数据分类存储

  • 表单类数据 (定位坐标、偏差理由文字、打卡时间等结构化字段):用 uni.setStorageSync 存成JSON对象,体积小,直接存没问题
  • 图片类数据 :拍照后不直接转Base64存Storage(Storage一般有单条几MB的容量限制,图片转Base64体积还会膨胀约33%,容易超限)。更合理的做法是用 uni.saveFile 把临时拍摄的图片保存到本地文件系统的持久化路径 ,Storage里只存这个文件的本地路径,减轻Storage的存储压力

2. 维护一个"待提交队列"

javascript 复制代码
// 队列结构示例
{
  queue: [
    {
      id: 'temp_001', // 本地临时ID
      type: 'inspection_record',
      data: { location: {...}, reason: '定位偏差原因', photoPath: 'xxx' },
      status: 'pending', // pending | submitting | failed
      createTime: 1234567890
    }
  ]
}

每次用户在无网环境下提交一条记录,不直接发请求,而是追加进这个队列,存进Storage。

3. 监听网络恢复,触发队列处理

javascript 复制代码
uni.onNetworkStatusChange((res) => {
  if (res.isConnected) {
    processOfflineQueue(); // 网络恢复,处理待提交队列
  }
});

async function processOfflineQueue() {
  const queue = uni.getStorageSync('offline_queue') || [];
  for (const item of queue) {
    if (item.status === 'pending') {
      try {
        item.status = 'submitting';
        await submitToServer(item.data); // 真正发请求
        // 提交成功,从队列移除
        removeFromQueue(item.id);
      } catch (err) {
        item.status = 'failed'; // 失败保留,下次再试
      }
    }
  }
  uni.setStorageSync('offline_queue', queue);
}

4. 用户侧的感知设计(对应你提到的"提醒用户补充完整信息")

  • 网络恢复后,弹一个轻提示:"检测到N条离线记录,正在为您同步",同步完成再提示"同步成功"
  • 如果某条记录一直提交失败(比如数据本身有问题),做一个**"待同步"角标/列表**,让用户能主动查看、手动处理,而不是无声无息地一直失败

总结

"网络不好的情况下,我们会把数据先存到本地------结构化的表单数据用uniapp的本地存储API直接存,拍摄的照片存到本地文件系统,避免Storage空间不够。同时维护一个待提交队列,每条离线数据先进队列、标记为待提交状态。通过uniapp的网络状态监听API,检测到网络恢复后,自动遍历队列逐条重新提交,成功了从队列移除,失败了保留、下次再重试。用户侧会有提示,比如网络恢复时弹窗告知有几条数据正在同步,避免用户不知情。另外像定位偏差这种字段,我们也会让用户手动补充偏差原因,保证数据的可追溯性。"


相关推荐
计算机魔术师12 分钟前
OpenAI 砍掉 100 亿融资目标,AI 资本市场的温度计变了
前端
jktantan32 分钟前
(二)Vue 3 的 attrs 不是响应式:el-form 扩展属性同步的三种方案
前端·javascript·vue.js·element-plus
前端 贾公子1 小时前
第 5 章:Codex 从可运行程序到可交付工具
java·前端·数据库
用户360055579001 小时前
Kestrel_VLLM - 26 · 发射空档三步曲:事件计时 → nsys → 判别实验
前端
echome8881 小时前
JavaScript async/await 错误处理:别让 Promise 静默失败
开发语言·前端·javascript·promise
PedroQue992 小时前
v0.2.0 架构升级:class + reactive 重塑状态管理
前端·uni-app
鶴哥只手遮天2 小时前
Angular 22 源码级深度解析-第 02 章 编译链路总览:从模板字符串到 `ɵɵ` 指令
前端·开源·angular.js
尘世中一位迷途小书童2 小时前
别再堆万字 Prompt:用 Agent Skills 给团队写一个「前端 Review」Skill
前端·ai编程·cursor
aixingpan2 小时前
aixingpan.cn API开发文档:api_docs_bichart_common2接口指南
前端·php
super_Omni2 小时前
text/PDF/Word → 解析成纯文本 → 分词 → 词表匹配 → 加权打分 → 低于阈值
前端·chrome