优化心率检测报错 3289/target/2 3290/1 3290/head
authorCaisking <Casiking@zhihuishixun.com>
Wed, 18 Mar 2026 11:04:35 +0000 (19:04 +0800)
committerCaisking <Casiking@zhihuishixun.com>
Wed, 18 Mar 2026 11:04:35 +0000 (19:04 +0800)
code/sdk/application/wearable/fd272/nativeapp/nativeui/heartrate/include/HeartModel.h
code/sdk/application/wearable/fd272/nativeapp/nativeui/heartrate/src/HeartModel.cpp

index 37f1d26..e5393ee 100644 (file)
@@ -199,6 +199,7 @@ private:
   HeartCheck checkstate = HeartCheck::RESTSTSTE;      // 目前检测状态\r
 \r
   uint16_t dynamic_heartrate[5]; //动态心率配置项\r
+  std::string last_check_string_; // 上一次检测结果\r
 \r
   uint8_t heartRemindState{0};\r
   uint16_t thresholdValue{160};\r
index fb3da8e..564bab1 100644 (file)
@@ -870,41 +870,33 @@ uint16_t *HeartModel::GetArrayData() { return dynamic_heartrate; }
 // 获取检测字符串\r
 // TODO: 适配多国语言\r
 std::string HeartModel::GetCheckString() {\r
+  \r
   std::string check_string = "检测结果未知";\r
-\r
-  // 获取检测数据\r
-  if (currentheart == 0) {\r
+  auto noDataString = []() -> std::string {\r
     if (ConfigModel::GetInstance()->GetLanguage() == ZH_CN) {\r
-      check_string = "暂无检测数据";\r
-    } else {\r
-      check_string = "No detection data is available";\r
+      return "暂无检测数据";\r
     }\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "检测数据:%s", check_string.c_str());\r
-    return check_string;\r
-  }\r
+    return "No detection data is available";\r
+  };\r
 \r
   // 获取目前的时间戳\r
   uint32_t currentTime;\r
-  if (uapi_get_timestampe_ss(&currentTime) != ERRCODE_SUCC) {\r
-    if (ConfigModel::GetInstance()->GetLanguage() == ZH_CN) {\r
-      check_string = "获取当前时间失败";\r
-    } else {\r
-      check_string = "Get time failed";\r
-    }\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "获取当前时间失败");\r
-    return check_string;\r
+  if (uapi_get_timestampe_ms(&currentTime) != ERRCODE_SUCC) {\r
+    return noDataString();\r
   }\r
 \r
-  // 检查时间戳是否有效\r
-  if (timestamp_ms == 0) {\r
-    if (ConfigModel::GetInstance()->GetLanguage() == ZH_CN) {\r
-      check_string = std::to_string(currentheart) + " " + "时间无效,无法检测";\r
-    } else {\r
-      check_string =\r
-          std::to_string(currentheart) + " " + "Invalid time, cannot detect";\r
+  // 获取检测数据\r
+  if (currentheart == 0 || timestamp_ms == 0 || currentTime == 0) {\r
+    // 用户不需要知道时间戳失败:优先展示上一次检测结果;没有才展示“暂无检测数据”\r
+    if (!last_check_string_.empty()) {\r
+      WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,\r
+                    "检测数据不可用(heart=%d,time=%d,ts=%d),回退显示上一次结果:%s",\r
+                    currentheart, currentTime, timestamp_ms,\r
+                    last_check_string_.c_str());\r
+      return last_check_string_;\r
     }\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "时间戳无效,无法检测:%s",\r
-                  check_string.c_str());\r
+    check_string = noDataString();\r
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "检测数据:%s", check_string.c_str());\r
     return check_string;\r
   }\r
 \r
@@ -944,6 +936,7 @@ std::string HeartModel::GetCheckString() {
   }\r
 \r
   WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "检测结果:%s", check_string.c_str());\r
+  last_check_string_ = check_string;\r
   return check_string; // Return the final string\r
 }\r
 \r