优化心率血氧存储以及显示 373/3 373/head
authorCaisking <3449750381@qq.com>
Mon, 24 Jun 2024 13:04:52 +0000 (21:04 +0800)
committerCaisking <3449750381@qq.com>
Mon, 24 Jun 2024 13:04:52 +0000 (21:04 +0800)
code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/src/BloodCheckView.cpp
code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/src/BloodOxygenModel.cpp
code/sdk/application/wearable/fd230app/nativeui/heart_blood/health_service/defult_health.json
code/sdk/application/wearable/fd230app/nativeui/heart_blood/health_service/health_service.cpp
code/sdk/application/wearable/fd230app/nativeui/heart_blood/health_service/health_service.h
code/sdk/application/wearable/fd230app/nativeui/heartrate/include/HeartModel.h
code/sdk/application/wearable/fd230app/nativeui/heartrate/src/HeartModel.cpp
code/sdk/application/wearable/fd230app/nativeui/heartrate/src/HeartView.cpp

index 6588368..05ea9a9 100644 (file)
@@ -105,9 +105,9 @@ namespace OHOS
         titleLabel->SetStyle(STYLE_TEXT_FONT, 28);
         // titleLabel->SetText("正在检测");
         titleLabel->SetTextId(STR_CHECKON);
-        titleLabel->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
+        titleLabel->SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE);
         titleLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
-        titleLabel->SetRollSpeed(0);
+        titleLabel->SetRollSpeed(30);
         titleLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 28);
         BloodCheckScrollView->Add(titleLabel);
         /* -------------------------------------------------------------------------- */
index 5194cfe..1dcf25f 100644 (file)
@@ -17,11 +17,18 @@ namespace OHOS
      */
     BloodOxygenModel::BloodOxygenModel() : OxygenView(false), BandoffView(false), CheckView(false), ResultView(false), CheckStatus(false), wearStatus(true)
     {
-        BloodOxygenData *data = new BloodOxygenData;
-        data = HealthService::GetInstance()->ReadBloodOxygenData();
-        SPO2_ = data->SPO2;
-        timestamp_ms = data->timestamp;
-        delete data;
+        BloodOxygenData *data = HealthService::GetInstance()->ReadBloodOxygenData();
+        if (data)
+        {
+            SPO2_ = data->SPO2;
+            timestamp_ms = data->timestamp;
+            delete data;
+        }
+        else
+        {
+            SPO2_ = 0;
+            timestamp_ms = 0;
+        }
     }
     BloodOxygenModel::~BloodOxygenModel() {}
     BloodOxygenModel *BloodOxygenModel::GetInstance(void)
@@ -166,7 +173,7 @@ namespace OHOS
             BloodOxygenData *data = new BloodOxygenData;
             data->SPO2 = spo2;
             data->timestamp = BloodOxygenPresenter::GetInstance()->GetCurrentTime();
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "%d %lld", spo2, data->timestamp);
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "%d %d", spo2, data->timestamp);
             SetCheckTime(data->timestamp);
             HealthService::GetInstance()->UpdateBloodOxygenData(*data);
             delete data;
index 77e0e54..0abdbde 100644 (file)
@@ -1,21 +1,11 @@
-{
-    "spo2_latest_data": {
-        "oxygen_value": 0,
-        "timestamp": 0
-    },
-    "spo2_data_list": [
-        {
-            "oxygen_value": 0,
-            "timestamp": 0
-        }
-    ],
+data{
     "heart_latest_data": {
-        "heart_value": 0,
+        "value": 0,
         "timestamp": 0
     },
     "heart_data_list": [
         {
-            "heart_value": 0,
+            "value": 0,
             "timestamp": 0
         }
     ]
index 7c1bb38..250a49e 100644 (file)
@@ -5,6 +5,7 @@
 #include "cJSON.h"
 #include <sys/stat.h>
 #include <ctime>
+#include "kv_store.h"
 namespace OHOS
 {
 
@@ -40,13 +41,19 @@ namespace OHOS
     static constexpr const char *HEALTH_JSON_PATH = "/user/userdata/health/";
     static constexpr const char *HEALTH_JSON_PATH_HEART = "/user/userdata/health/heart/";
     static constexpr const char *HEALTH_JSON_PATH_OXYGEN = "/user/userdata/health/oxygen/";
-
+    const char *GET_HEALTH_JSON_PATH_C_STR_HEART()
+    {
+        return HEALTH_JSON_PATH_HEART;
+    }
+    const char *GET_HEALTH_JSON_PATH_C_STR_OXYGEN()
+    {
+        return HEALTH_JSON_PATH_OXYGEN;
+    }
     /* --------------------------------- 文件IO操作 --------------------------------- */
     /*创建文件夹*/
     bool HealthService::CreateHealthFolder()
     {
         struct stat info;
-        // 判断HEALTH_JSON_PATH是否存在 不存在就创建
         if (stat(HEALTH_JSON_PATH, &info) != 0)
         {
             if (mkdir(HEALTH_JSON_PATH, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) != 0)
@@ -55,7 +62,6 @@ namespace OHOS
                 return false; // Failed to create folder
             }
         }
-        // 判断HEALTH_JSON_PATH_HEART是否存在 不存在就创建
         if (stat(HEALTH_JSON_PATH_HEART, &info) != 0)
         {
             if (mkdir(HEALTH_JSON_PATH_HEART, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) != 0)
@@ -64,7 +70,6 @@ namespace OHOS
                 return false; // Failed to create folder
             }
         }
-        // 判断HEALTH_JSON_PATH_OXYGEN是否存在 不存在就创建
         if (stat(HEALTH_JSON_PATH_OXYGEN, &info) != 0)
         {
             if (mkdir(HEALTH_JSON_PATH_OXYGEN, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) != 0)
@@ -84,30 +89,34 @@ namespace OHOS
 
         return healthTypePath + currentDate + ".json";
     }
-    const char *GET_HEALTH_JSON_PATH_C_STR_HEART()
-    {
-        return HEALTH_JSON_PATH_HEART;
-    }
-    const char *GET_HEALTH_JSON_PATH_C_STR_OXYGEN()
-    {
-        return HEALTH_JSON_PATH_OXYGEN;
-    }
+    // 加载 JSON 数据
     bool HealthService::LoadJsonData(uint8_t type)
     {
-        // 创建健康数据文件夹
         if (!CreateHealthFolder())
         {
             return false;
         }
-        // 获取当天日期对应的JSON文件路径
         std::string jsonFilePath = GetJsonFilePath(type);
         printf("GetJsonFilePath:%s\r\n", jsonFilePath.c_str());
+
         std::ifstream inFile(jsonFilePath);
+        if (!inFile.is_open())
+        {
+            printf("Failed to open JSON file.\r\n");
+            FILE *fp = fopen(jsonFilePath.c_str(), "wb");
+            return false;
+        }
 
-        // 读取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 (jsonDataString.empty())
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " jsonDataString is error");
+            // printf("JSON file is empty.\r\n");
+            return false;
+        }
+
         if (type == HEALTH_TYPE_HEART)
         {
             heart_root = cJSON_Parse(jsonData);
@@ -119,110 +128,225 @@ namespace OHOS
 
         return true;
     }
+    // 释放 JSON 数据
+    void HealthService::ReleaseJsonData(uint8_t type)
+    {
+        if (type == HEALTH_TYPE_HEART)
+        {
+            cJSON_Delete(heart_root);
+        }
+        if (type == HEALTH_TYPE_OXYGEN)
+        {
+            cJSON_Delete(oxygen_root);
+        }
+    }
 
+    // 读取血氧数据
     BloodOxygenData *HealthService::ReadBloodOxygenData()
     {
-        LoadJsonData(HEALTH_TYPE_OXYGEN);
+        if (!LoadJsonData(HEALTH_TYPE_OXYGEN))
+        {
+            return nullptr;
+        }
+
         BloodOxygenData *data = new BloodOxygenData();
         cJSON *latestData = cJSON_GetObjectItem(oxygen_root, "spo2_latest_data");
-        data->SPO2 = cJSON_GetObjectItem(latestData, "value")->valueint;
-        data->timestamp = cJSON_GetObjectItem(latestData, "timestamp")->valuedouble;
-        cJSON_Delete(oxygen_root);
+        if (latestData != NULL)
+        {
+            data->SPO2 = cJSON_GetObjectItem(latestData, "value")->valueint;
+            data->timestamp = cJSON_GetObjectItem(latestData, "timestamp")->valuedouble;
+        }
+
+        ReleaseJsonData(HEALTH_TYPE_OXYGEN);
+        return data;
+    }
+    HeartRateData *HealthService::ReadHeartRateData()
+    {
+        if (!LoadJsonData(HEALTH_TYPE_HEART))
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LoadJsonData  is error ");
+            return nullptr;
+        }
+
+        HeartRateData *data = new HeartRateData();
+        cJSON *latestData = cJSON_GetObjectItem(heart_root, "heart_latest_data");
+        if (latestData != NULL)
+        {
+            // 读取心率值
+            data->Heart = cJSON_GetObjectItem(latestData, "value")->valueint;
+            data->timestamp = static_cast<uint32_t>(cJSON_GetObjectItem(latestData, "timestamp")->valueint);
+
+            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);
+        }
+        ReleaseJsonData(HEALTH_TYPE_HEART);
+
         return data;
     }
+
     bool HealthService::UpdateBloodOxygenData(const BloodOxygenData &data)
     {
-        LoadJsonData(HEALTH_TYPE_OXYGEN);
-        cJSON *latestData = cJSON_GetObjectItem(oxygen_root, "spo2_latest_data");
-        if (latestData == NULL)
+        if (!LoadJsonData(HEALTH_TYPE_OXYGEN))
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LoadJsonData is error");
+            // return false;
+        }
+
+        if (oxygen_root == nullptr)
         {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "oxygen_root is first");
+            oxygen_root = cJSON_CreateObject();
+            if (oxygen_root == nullptr)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to create cJSON object for oxygen_root");
+                return false;
+            }
+            cJSON_AddItemToObject(oxygen_root, "spo2_latest_data", cJSON_CreateObject());
+            cJSON_AddItemToObject(oxygen_root, "spo2_data_list", cJSON_CreateArray());
+        }
+
+        cJSON *latestData = cJSON_GetObjectItemCaseSensitive(oxygen_root, "spo2_latest_data");
+        if (latestData == NULL || !cJSON_IsObject(latestData))
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to get spo2_latest_data object");
+            cJSON_Delete(oxygen_root);
+            oxygen_root = nullptr;
             return false;
         }
-        cJSON_ReplaceItemInObject(latestData, "value", cJSON_CreateNumber(data.SPO2));
-        cJSON_ReplaceItemInObject(latestData, "timestamp", cJSON_CreateNumber(data.timestamp));
 
-        // 将数据添加到列表的最后
+        cJSON *SPO2 = cJSON_GetObjectItemCaseSensitive(latestData, "value");
+        if (SPO2 == nullptr && cJSON_IsNumber(SPO2))
+        {
+            // Add spo2_latest_data
+            cJSON_AddItemToObject(latestData, "value", cJSON_CreateNumber(data.SPO2));
+            cJSON_AddItemToObject(latestData, "timestamp", cJSON_CreateNumber(data.timestamp));
+        }
+        else
+        {
+            cJSON_ReplaceItemInObject(latestData, "value", cJSON_CreateNumber(data.SPO2));
+            cJSON_ReplaceItemInObject(latestData, "timestamp", cJSON_CreateNumber(data.timestamp));
+        }
+
+        // Update or add to spo2_data_list
         cJSON *dataList = cJSON_GetObjectItem(oxygen_root, "spo2_data_list");
         if (dataList != NULL && cJSON_IsArray(dataList))
         {
-            cJSON *newData = cJSON_CreateObject();
-            cJSON_AddItemToObject(newData, "value", cJSON_CreateNumber(data.SPO2));
-            cJSON_AddItemToObject(newData, "timestamp", cJSON_CreateNumber(data.timestamp));
-            cJSON_AddItemToArray(dataList, newData);
+            // Check if data already exists in the list
+            bool dataExists = false;
+            cJSON *dataItem = NULL;
+            cJSON_ArrayForEach(dataItem, dataList)
+            {
+                cJSON *timestampItem = cJSON_GetObjectItemCaseSensitive(dataItem, "timestamp");
+                if (timestampItem != NULL && cJSON_IsNumber(timestampItem) && timestampItem->valuedouble == data.timestamp)
+                {
+                    cJSON_ReplaceItemInObject(dataItem, "value", cJSON_CreateNumber(data.SPO2));
+                    dataExists = true;
+                    break;
+                }
+            }
+
+            if (!dataExists)
+            {
+                cJSON *newData = cJSON_CreateObject();
+                cJSON_AddItemToObject(newData, "value", cJSON_CreateNumber(data.SPO2));
+                cJSON_AddItemToObject(newData, "timestamp", cJSON_CreateNumber(data.timestamp));
+                cJSON_AddItemToArray(dataList, newData);
+            }
         }
-        if (UpdateJsonData(HEALTH_TYPE_OXYGEN) == false)
+
+        if (!UpdateJsonData(HEALTH_TYPE_OXYGEN))
         {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UpdateJsonData is error");
-            cJSON_Delete(oxygen_root);
+            printf("UpdateJsonData failed.\r\n");
+            ReleaseJsonData(HEALTH_TYPE_OXYGEN);
             return false;
         }
-        cJSON_Delete(oxygen_root);
+
+        ReleaseJsonData(HEALTH_TYPE_OXYGEN);
         return true;
     }
 
-    HeartRateData *HealthService::ReadHeartRateData()
+    bool HealthService::UpdateHeartRateData(const HeartRateData &data)
     {
-        if (!LoadJsonData(HEALTH_TYPE_HEART) && (heart_root == nullptr))
+        if (!LoadJsonData(HEALTH_TYPE_HEART))
         {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ReadHeartRateData heart_root is error ");
-            return nullptr;
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LoadJsonData is error");
+            // return false;
         }
-        HeartRateData *data = new HeartRateData();
-        cJSON *latestData = cJSON_GetObjectItem(heart_root, "heart_latest_data");
-        // 读取心率值
-        data->Heart = cJSON_GetObjectItem(latestData, "value")->valueint;
-        // 读取时间戳,并转换为 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;
-    }
 
-    bool HealthService::UpdateHeartRateData(const HeartRateData &data)
-    {
-        LoadJsonData(HEALTH_TYPE_HEART);
-        cJSON *latestData = cJSON_GetObjectItem(heart_root, "heart_latest_data");
-        if (latestData == NULL)
+        if (heart_root == nullptr)
         {
+            heart_root = cJSON_CreateObject();
+            if (heart_root == nullptr)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to create cJSON object for heart_root");
+                return false;
+            }
+
+            cJSON_AddItemToObject(heart_root, "heart_latest_data", cJSON_CreateObject());
+            cJSON_AddItemToObject(heart_root, "heart_data_list", cJSON_CreateArray());
+        }
+
+        cJSON *latestData = cJSON_GetObjectItemCaseSensitive(heart_root, "heart_latest_data");
+        if (latestData == NULL || !cJSON_IsObject(latestData))
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to get heart_latest_data object");
+            cJSON_Delete(heart_root);
+            heart_root = nullptr;
             return false;
         }
-        cJSON_ReplaceItemInObject(latestData, "value", cJSON_CreateNumber(data.Heart));
-        cJSON_ReplaceItemInObject(latestData, "timestamp", cJSON_CreateNumber(data.timestamp));
 
-        // 将数据添加到列表的最后
-        cJSON *dataList = cJSON_GetObjectItem(heart_root, "heart_data_list");
-        // 获取当前数据列表长度
-        int numData = cJSON_GetArraySize(dataList);
+        cJSON *Heart = cJSON_GetObjectItemCaseSensitive(latestData, "value");
+        if (Heart == nullptr && !cJSON_IsNumber(Heart))
+        {
+            // Add heart_latest_data
+            cJSON_AddItemToObject(latestData, "value", cJSON_CreateNumber(data.Heart));
+            cJSON_AddItemToObject(latestData, "timestamp", cJSON_CreateNumber(data.timestamp));
+        }
+        else
+        {
+            cJSON_ReplaceItemInObject(latestData, "value", cJSON_CreateNumber(data.Heart));
+            cJSON_ReplaceItemInObject(latestData, "timestamp", cJSON_CreateNumber(data.timestamp));
+        }
 
-        // 如果数据列表长度已经达到360个,不再添加新数据
-        if (numData >= 360)
+        // // 更新heart_latest_data中的value和timestamp值
+        // cJSON_AddItemToObject(latestData, "value", cJSON_CreateNumber(data.Heart));
+        // cJSON_AddItemToObject(latestData, "timestamp", cJSON_CreateNumber(data.timestamp));
+
+        cJSON *dataList = cJSON_GetObjectItem(heart_root, "heart_data_list");
+        if (dataList == NULL || !cJSON_IsArray(dataList))
         {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "heart_data_list is null or not an array");
             cJSON_Delete(heart_root);
+            heart_root = nullptr;
             return false;
         }
 
-        if (dataList != NULL && cJSON_IsArray(dataList))
+        int numData = cJSON_GetArraySize(dataList);
+        if (numData >= 360)
         {
-            cJSON *newData = cJSON_CreateObject();
-            cJSON_AddItemToObject(newData, "value", cJSON_CreateNumber(data.Heart));
-            cJSON_AddItemToObject(newData, "timestamp", cJSON_CreateNumber(data.timestamp));
-            cJSON_AddItemToArray(dataList, newData);
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Data list is full (360 items)");
+            return false;
         }
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UpdateJsonData");
+
+        // 添加新数据到dataList中
+        cJSON *newData = cJSON_CreateObject();
+        cJSON_AddItemToObject(newData, "value", cJSON_CreateNumber(data.Heart));
+        cJSON_AddItemToObject(newData, "timestamp", cJSON_CreateNumber(data.timestamp));
+        cJSON_AddItemToArray(dataList, newData);
+
         if (UpdateJsonData(HEALTH_TYPE_HEART) == false)
         {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UpdateJsonData is error");
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to update JSON data for heart rate");
             cJSON_Delete(heart_root);
+            heart_root = nullptr;
             return false;
         }
-        cJSON_Delete(heart_root);
+
         return true;
     }
 
@@ -260,5 +384,4 @@ namespace OHOS
         cJSON_free(jsonData);
         return true;
     }
-
 }
\ No newline at end of file
index 2929060..a83c82a 100644 (file)
@@ -1,3 +1,9 @@
+/*** 
+ * @Date: 2024-06-14 11:34:19
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-06-24 16:08:36
+ * @FilePath: /XTS_FD230/FD230/code/sdk/application/wearable/fd230app/nativeui/heart_blood/health_service/health_service.h
+ */
 #ifndef HEART_SERVICE_H
 #define HEART_SERVICE_H
 
 #define HEART_MAX_POINTS 360
 namespace OHOS
 {
-    const char * GET_HEALTH_JSON_PATH_C_STR_HEART();
-    const char * GET_HEALTH_JSON_PATH_C_STR_OXYGEN();
+    const char *GET_HEALTH_JSON_PATH_C_STR_HEART();
+    const char *GET_HEALTH_JSON_PATH_C_STR_OXYGEN();
 
-    typedef enum {
+    typedef enum
+    {
         HEALTH_TYPE_HEART,
         HEALTH_TYPE_OXYGEN,
     } HEALTH_TYPE;
 
     typedef struct
     {
-        uint8_t SPO2;      // 血氧值
+        uint8_t SPO2;       // 血氧值
         uint32_t timestamp; // 最近一次检测时间
     } BloodOxygenData;
 
@@ -41,7 +48,7 @@ namespace OHOS
 
     typedef struct
     {
-        uint8_t Heart;     // 心率值
+        uint8_t Heart;      // 心率值
         uint32_t timestamp; // 最近一次检测时间
     } HeartRateData;
 
@@ -52,13 +59,14 @@ namespace OHOS
         ~HealthService();
         static HealthService *GetInstance(void);
         bool CreateHealthFolder();
-        bool LoadJsonData(uint8_t type);                                     // 加载json
+        bool LoadJsonData(uint8_t type);                         // 加载json
         BloodOxygenData *ReadBloodOxygenData();                  // 读取血氧数据
         bool UpdateBloodOxygenData(const BloodOxygenData &data); // 更新血氧数据
         HeartRateData *ReadHeartRateData();                      // 读取心率数据
         HeartPoints *ReadHeartRateDataList();                    // 读取心率列表
         bool UpdateHeartRateData(const HeartRateData &data);     // 更新心率数据
-        bool UpdateJsonData( uint8_t type);                                   // 更新json
+        void ReleaseJsonData(uint8_t type);                      // 释放json
+        bool UpdateJsonData(uint8_t type);                       // 更新json
     };
 }
 #endif // HEALTH_MODEL_H
\ No newline at end of file
index d7a1572..0283372 100644 (file)
@@ -158,8 +158,8 @@ extern "C"
             bool CheckView;\r
             bool ResultView;\r
             bool CheckStatus;     // 检测状态标志\r
-            uint16_t Show_Heart_; // 显示血氧\r
-            uint16_t Heart_;      // 保存血氧\r
+            uint16_t Show_Heart_; // 显示心率\r
+            uint16_t Heart_;      // 保存心率\r
             uint64 TIME_;         // 检测时间(存(时、分),大于24小时,改为1天前,小于1分钟为刚刚)\r
 \r
             bool initstatus = true;\r
index c567465..a19f7a4 100644 (file)
@@ -189,6 +189,19 @@ namespace OHOS
         ResultView = false;\r
         CheckStatus = false;\r
         wearStatus = true;\r
+\r
+        HeartRateData *data = HealthService::GetInstance()->ReadHeartRateData();\r
+        if (data != nullptr)\r
+        {\r
+            Heart_ = data->Heart;\r
+            TIME_ = data->timestamp;\r
+            delete data;\r
+        }\r
+        else\r
+        {\r
+            Heart_ = 0;\r
+            TIME_ = 0;\r
+        }\r
     }\r
 \r
     HeartModel::~HeartModel()\r
index a24feb3..40eda29 100644 (file)
@@ -43,13 +43,19 @@ 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;
+        /*更新model 如果model数据为0,尝试再读一次*/
+        if (!HeartModel::GetInstance()->GetHeartdata())
+        {
+            HeartRateData *data;
+            data = HealthService::GetInstance()->ReadHeartRateData(); // 初始化心率值
+            if (data != nullptr)
+            {
+                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()
@@ -170,9 +176,9 @@ namespace OHOS
         titleLabel->SetStyle(STYLE_TEXT_FONT, TITLE_FONT_SIZE);
         // titleLabel->SetText("心率检测结果");
         titleLabel->SetTextId(STR_HEARTDATA);
-        titleLabel->SetLineBreakMode(UILabelExt::LINE_BREAK_ADAPT);
+        titleLabel->SetLineBreakMode(UILabelExt::LINE_BREAK_MARQUEE);
         titleLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
-        titleLabel->SetRollSpeed(0);
+        titleLabel->SetRollSpeed(30);
         titleLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, TITLE_FONT_SIZE);
 
         UpHeartText();