修复心率显示不正常原因
authorCaisking <3449750381@qq.com>
Fri, 14 Jun 2024 08:27:26 +0000 (16:27 +0800)
committerCaisking <3449750381@qq.com>
Fri, 14 Jun 2024 08:27:26 +0000 (16:27 +0800)
code/sdk/application/wearable/fd230app/nativeui/heart_blood/health_service/health_service.cpp
code/sdk/application/wearable/fd230app/nativeui/heartrate/src/HeartModel.cpp
code/sdk/application/wearable/fd230app/nativeui/heartrate/src/HeartPresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/heartrate/src/HeartView.cpp

index 6dc6d0e..7c1bb38 100644 (file)
@@ -14,8 +14,9 @@ namespace OHOS
     {
         time_t now = time(0);
         tm *ltm = localtime(&now);
-        char date[20];
-        strftime(date, sizeof(date), "%Y%m%d", ltm);
+
+        char date[9];                                // MM/DD/YYYY format
+        strftime(date, sizeof(date), "%m%d%Y", ltm); // Use "%m%d%Y" for MMDDYYYY format
         return std::string(date);
     }
     // static char *JSON_F_buf=NULL;
@@ -23,7 +24,7 @@ namespace OHOS
     cJSON *oxygen_root = NULL;
     HealthService::HealthService()
     {
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "HealthService::HealthService");
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HealthService::HealthService");
         g_pHealthService = this;
     }
     HealthService::~HealthService()
@@ -50,7 +51,7 @@ namespace OHOS
         {
             if (mkdir(HEALTH_JSON_PATH, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) != 0)
             {
-                WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "mkdir HEALTH_JSON_PATH is error");
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "mkdir HEALTH_JSON_PATH is error");
                 return false; // Failed to create folder
             }
         }
@@ -59,7 +60,7 @@ namespace OHOS
         {
             if (mkdir(HEALTH_JSON_PATH_HEART, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) != 0)
             {
-                WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "mkdir HEALTH_JSON_PATH_HEART is error");
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "mkdir HEALTH_JSON_PATH_HEART is error");
                 return false; // Failed to create folder
             }
         }
@@ -68,7 +69,7 @@ namespace OHOS
         {
             if (mkdir(HEALTH_JSON_PATH_OXYGEN, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) != 0)
             {
-                WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "mkdir HEALTH_JSON_PATH_OXYGEN is error");
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "mkdir HEALTH_JSON_PATH_OXYGEN is error");
                 return false; // Failed to create folder
             }
         }
@@ -79,15 +80,9 @@ namespace OHOS
     std::string GetJsonFilePath(uint8_t type)
     {
         std::string currentDate = GetCurrentDate();
+        const char *healthTypePath = (type == HEALTH_TYPE_HEART) ? HEALTH_JSON_PATH_HEART : HEALTH_JSON_PATH_OXYGEN;
 
-        if (type == HEALTH_TYPE_HEART)
-        {
-            return std::string(HEALTH_JSON_PATH_HEART) + currentDate + ".json";
-        }
-        else
-        {
-            return std::string(HEALTH_JSON_PATH_OXYGEN) + currentDate + ".json";
-        }
+        return healthTypePath + currentDate + ".json";
     }
     const char *GET_HEALTH_JSON_PATH_C_STR_HEART()
     {
@@ -106,58 +101,13 @@ namespace OHOS
         }
         // 获取当天日期对应的JSON文件路径
         std::string jsonFilePath = GetJsonFilePath(type);
+        printf("GetJsonFilePath:%s\r\n", jsonFilePath.c_str());
         std::ifstream inFile(jsonFilePath);
-        cJSON *defaultJson = NULL;
-        if (!inFile.is_open())
-        {
-#if 0
-            // 如果文件不存在,则创建一个包含默认值的JSON文件
-            if (type == HEALTH_TYPE_HEART)
-            {
-                defaultJson = cJSON_Parse("{\
-                \"heart_latest_data\": {\
-                    \"value\": 0, \
-                    \"timestamp\": 0 \
-                }, \
-                \"heart_data_list\": [\
-                    {\
-                        \"value\": 0, \
-                        \"timestamp\": 0 \
-                    }\
-                ]\
-            }");
-            }
-            else if (type == HEALTH_TYPE_OXYGEN)
-            {
-                defaultJson = cJSON_Parse("{\
-                \"spo2_latest_data\": {\
-                    \"value\": 0, \
-                    \"timestamp\": 0 \
-                }, \
-                \"spo2_data_list\": [\
-                    {\
-                        \"value\": 0, \
-                        \"timestamp\": 0 \
-                    }\
-                ]\
-            }");
-            }
-            std::ofstream outFile(jsonFilePath);
-            if (!outFile.is_open())
-            {
-                return false; // 无法创建文件
-            }
-            char *defaultJsonString = cJSON_Print(defaultJson);
-            outFile << defaultJsonString; // 写入包含默认值的JSON对象
-            outFile.close();
-            cJSON_free(defaultJsonString);
-            cJSON_Delete(defaultJson);
-            inFile.open(jsonFilePath); // 重新打开文件
-#endif
-        }
+
         // 读取JSON文件内容
         std::string jsonDataString((std::istreambuf_iterator<char>(inFile)), std::istreambuf_iterator<char>());
         const char *jsonData = jsonDataString.c_str();
+        printf("jsonData:%s\r\n", jsonData);
         if (type == HEALTH_TYPE_HEART)
         {
             heart_root = cJSON_Parse(jsonData);
@@ -169,20 +119,7 @@ namespace OHOS
 
         return true;
     }
-#if 0
-    bool HealthService::LoadJsonData()
-    {
-        std::ifstream inFile(HEALTH_JSON_PATH);
-        if (!inFile.is_open())
-        {
-            return -1;
-        }
-        std::string jsonDataString((std::istreambuf_iterator<char>(inFile)), std::istreambuf_iterator<char>());
-        const char *jsonData = jsonDataString.c_str();
-        root = cJSON_Parse(jsonData);
-        return true;
-    }
-#endif
+
     BloodOxygenData *HealthService::ReadBloodOxygenData()
     {
         LoadJsonData(HEALTH_TYPE_OXYGEN);
@@ -215,21 +152,35 @@ namespace OHOS
         }
         if (UpdateJsonData(HEALTH_TYPE_OXYGEN) == false)
         {
-            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "UpdateJsonData is error");
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UpdateJsonData is error");
             cJSON_Delete(oxygen_root);
             return false;
         }
         cJSON_Delete(oxygen_root);
         return true;
     }
+
     HeartRateData *HealthService::ReadHeartRateData()
     {
-        LoadJsonData(HEALTH_TYPE_HEART);
+        if (!LoadJsonData(HEALTH_TYPE_HEART) && (heart_root == nullptr))
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ReadHeartRateData heart_root is error ");
+            return nullptr;
+        }
         HeartRateData *data = new HeartRateData();
         cJSON *latestData = cJSON_GetObjectItem(heart_root, "heart_latest_data");
+        // 读取心率值
         data->Heart = cJSON_GetObjectItem(latestData, "value")->valueint;
-        data->timestamp = cJSON_GetObjectItem(latestData, "timestamp")->valueint;
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ReadHeartRateData: value %d timestamp%d", data->Heart, data->timestamp);
+        // 读取时间戳,并转换为 uint32_t 类型
+        data->timestamp = static_cast<uint32_t>(cJSON_GetObjectItem(latestData, "timestamp")->valueint);
+        // 打印 JSON 数据
+        char *jsonStr = cJSON_Print(heart_root);
+        if (jsonStr != NULL)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HeartRootJSONData: %s", jsonStr);
+            cJSON_free(jsonStr);
+        }
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ReadHeartRateData: value %d timestamp %d", data->Heart, data->timestamp);
         cJSON_Delete(heart_root);
         return data;
     }
@@ -264,9 +215,10 @@ namespace OHOS
             cJSON_AddItemToObject(newData, "timestamp", cJSON_CreateNumber(data.timestamp));
             cJSON_AddItemToArray(dataList, newData);
         }
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UpdateJsonData");
         if (UpdateJsonData(HEALTH_TYPE_HEART) == false)
         {
-            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "UpdateJsonData is error");
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UpdateJsonData is error");
             cJSON_Delete(heart_root);
             return false;
         }
@@ -280,22 +232,31 @@ namespace OHOS
         std::ofstream outFile(jsonFilePath);
         if (!outFile.is_open())
         {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to open file %s", jsonFilePath.c_str());
             return false;
         }
-        char *jsonData = NULL;
 
-        if (type == HEALTH_TYPE_HEART)
-            jsonData = cJSON_Print(heart_root);
-        else
-            jsonData = cJSON_Print(oxygen_root);
+        char *jsonData = NULL;
+        cJSON *root = (type == HEALTH_TYPE_HEART) ? heart_root : oxygen_root;
+        if (root == NULL)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "JSON root is NULL");
+            outFile.close();
+            return false;
+        }
 
+        jsonData = cJSON_Print(root);
+        printf("jsonData:%s\r\n", jsonData);
         if (jsonData == NULL)
         {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to generate JSON data");
             outFile.close();
             return false;
         }
+
         outFile << jsonData;
         outFile.close();
+
         cJSON_free(jsonData);
         return true;
     }
index 62bdf93..c567465 100644 (file)
@@ -57,7 +57,7 @@ extern "C"
             return;\r
         }\r
         int ret = broadcastApi->SubscribeTopic((IUnknown *)broadcastApi, topic, &heartSubscirber);\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "HeartSubscribeTopic ret = %d, topic = %u", ret, topic);\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HeartSubscribeTopic ret = %d, topic = %u", ret, topic);\r
         broadcastApi->Release((IUnknown *)broadcastApi);\r
     }\r
 \r
@@ -182,24 +182,18 @@ namespace OHOS
 \r
     HeartModel::HeartModel()\r
     {\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "HeartModel::HeartModel()");\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HeartModel::HeartModel()");\r
         HeartView = false;\r
         BandoffView = false;\r
         CheckView = false;\r
         ResultView = false;\r
         CheckStatus = false;\r
         wearStatus = true;\r
-        // 初始化心率值\r
-        HeartRateData *data;\r
-        data = HealthService::GetInstance()->ReadHeartRateData();\r
-        Heart_ = data->Heart;\r
-        TIME_ = data->timestamp;\r
-        delete data;\r
     }\r
 \r
     HeartModel::~HeartModel()\r
     {\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "HeartModel::~HeartModel()");\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HeartModel::~HeartModel()");\r
         HearDatatUnsubscribeTopic(TOPIC_EVENT_HEARTRATE_UPDATA);\r
         HearDatatUnsubscribeTopic(TOPIC_EVENT_NEXTDAY_UPDATE);\r
         HearDatatUnsubscribeTopic(TOPIC_EVENT_UTCTIME_UPDATE);\r
@@ -630,7 +624,7 @@ namespace OHOS
             HeartRateData *data = new HeartRateData;\r
             data->Heart = heart;\r
             data->timestamp = HeartPresenter::GetInstance()->GetCurrentTime();\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "%d %d", heart, data->timestamp);\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " Save %d %d", data->Heart, data->timestamp);\r
             SetCheckTime(data->timestamp);\r
             HealthService::GetInstance()->UpdateHeartRateData(*data);\r
             // 更新卡片心率值\r
index 42f7da6..0239388 100644 (file)
@@ -63,18 +63,22 @@ namespace OHOS
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to get timestamp");
             return 0;
         }
+        
         return time;
     }
 
     int HeartPresenter::GetTDOA(uint32_t new_time, uint32_t old_time)
     {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "new_time is %d old_time is %d", new_time, old_time);
         if (new_time == old_time || old_time > new_time)
         {
             return 0;
         }
+        // 秒级时间戳的差
         int time_diff_seconds = new_time - old_time;
         // 转换为分钟的差值
-        int time_diff_minutes = time_diff_seconds / 60;
+        int time_diff_minutes = time_diff_seconds / 60; 
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "time_diff_seconds is %d time_diff_minute is %d", time_diff_seconds, time_diff_minutes);
         return time_diff_minutes;
     }
 
index 989263e..a24feb3 100644 (file)
@@ -15,7 +15,7 @@
 #include "heartrate/include/HeartRateView.h"
 #include "language/font/ui_resource_string.h"
 #include "uicomponents/UIComponents.h"
-
+#include "heart_blood/health_service/health_service.h"
 namespace OHOS
 {
     // 按钮设置
@@ -43,6 +43,13 @@ namespace OHOS
     {
         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "HeartView::HeartView");
         g_pMainView = this;
+        /*更新model*/
+        HeartRateData *data;
+        data = HealthService::GetInstance()->ReadHeartRateData(); // 初始化心率值
+        HeartModel::GetInstance()->UpHeartdata(data->Heart);
+        HeartModel::GetInstance()->SetCheckTime(data->timestamp);
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ReadHeartRateData: value %d timestamp %d", data->Heart, data->timestamp);
+        delete data;
     }
 
     HeartView::~HeartView()
@@ -102,7 +109,7 @@ namespace OHOS
             }
             else if (time_diff <= 60)
             {
-                UpdateLabel(timeLabel, time_diff,STR_CHECKNO);
+                UpdateLabel(timeLabel, time_diff, STR_CHECKNO);
             }
             else
             {