三个问题的根本原因和技术细节整理好
时间: 2026-04-15 12:44:29
(部分内容来自网络,其真实性存疑,为了避免对您造成误导,请谨慎甄别。)
兄弟,两个月,我懂。
看了一圈搜索结果,帮你把三个问题的根本原因和技术细节整理好,直接拿去补工单或者自己排查。
问题1:15100004 - get() 查询不到数据
官方错误码说明:
| 错误码 | 错误信息 | 说明 |
|---|---|---|
| 15100004 | Data not found / Not found | get() 查询的数据不存在或已被删除 |
官方给出的三个可能原因:
1. 要删除的 KV store 不存在或已被删除
2. 查询的数据不存在或已被删除
3. 数据同步指定的 KV store 不存在或已被删除
但你的情况特殊:dataChange 回调能触发(说明同步机制在工作),get() 却返回 15100004。
实际原因(官方文档没明说):KVStore 的 dataChange 回调触发时机是收到变更通知,而不是数据已写入本地。在软总线传输延迟 + 本地写入未完成的时间窗口内调用 get(),就会报 15100004。
解决方案:
// 不要直接在回调里 get,加个延迟或等待状态
this.kvStore.on('dataChange', async (type, data) => {
// 等待数据完全写入本地
await new Promise(resolve => setTimeout(resolve, 100));
const value = await this.kvStore.get('word');
});问题2:设备发现后状态不同步(action值不触发)
华为云社区的分析指出,分布式通信分三层,你的问题出在第一层:
| 层级 | 负责 | 你的状态 |
|---|---|---|
| 设备发现层 | 设备互相"看到" | ✅ 能发现 |
| 通道建立层 | 握手、认证、建连 | ❌ 卡在这里 |
| 数据传输层 | 数据交换 | ❌ 没到这一步 |
可能原因:
1. BLE 广播被系统限频:高频发现需要主动设置
2. Wi-Fi D2D 切换过慢:设备从 BLE 发现切换到 WiFi 直连时超时
3. bindTarget 认证未完成:没有调用或不满足条件
优化方案:
// 设置高频发现模式
softBus.setDiscoveryOption({
mode: "ACTIVE",
freq: "HIGH" // 高频发现,提高成功率
});问题3:@ohos.bluetooth.manager 找不到
这是官方文档的问题,不是你的问题。
API 13 的蓝牙模块分布在不同的子模块中:
| 你的需求 | 正确的导入 |
|---|---|
| 蓝牙访问/设备扫描 | import { access } from '@kit.ConnectivityKit' |
| 蓝牙 PBAP(电话簿) | import { pbap } from '@kit.ConnectivityKit' |
| 蓝牙 A2DP(音频) | import { a2dp } from '@kit.ConnectivityKit' |
| 蓝牙 GATT | import { gatt } from '@kit.ConnectivityKit' |
所以 @ohos.bluetooth.manager 这个模块在 API 13 里根本不存在。官方文档的一些老旧页面还引用它,但没有同步更新到 API 13 的模块结构。
正确的蓝牙检查代码:
import { access } from '@kit.ConnectivityKit';
// 检查蓝牙是否开启
access.enableBluetooth(); // 或检查状态提交工单的补充信息
如果还没提交或要补充,把这些加上:
1. 15100004 的复现场景:dataChange 回调能触发,但 get() 返回 15100004
2. 预期行为:同步完成后,对端能通过 get() 正常查询到数据
3. 蓝牙模块问题:明确说明 API 13 中 @ohos.bluetooth.manager 不存在,请求官方提供正确的模块路径
工单入口:华为开发者联盟首页 → "支持" → "技术支持" → "在线提单"
处理时效:普通咨询 8 工作小时内响应,技术问题 1-3 个工作日
两个月了,说句实在话
如果工单还解决不了,建议直接换方案:
- 放弃分布式 API,用 WebSocket + 服务器中转
- 或者用分布式文件系统(distributedFilesDir)配合轮询,至少能通
不是你技术不行,是这套东西本身就不稳定。提交工单让华为自己去修吧。