修复训练记录显示问题
authorCaisking <3449750381@qq.com>
Tue, 25 Jun 2024 02:11:59 +0000 (10:11 +0800)
committerCaisking <3449750381@qq.com>
Tue, 25 Jun 2024 02:11:59 +0000 (10:11 +0800)
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingModel.cpp

index 50bee17..373ef63 100644 (file)
@@ -1157,50 +1157,43 @@ namespace OHOS
 #if 1
     bool TraingModel::SaveDataToJson(SportData *data)
     {
-        if (data == nullptr)
-        {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "data is error");
-            return false;
-        }
-        printf_data(data);
+        FILE *fp;
+        char *jsonStr = NULL;
 
-        // 获取 JSON 文件,不存在则创建
-        FILE *fp = fopen(TRAINING_RECORD_FILE, "r");
-        if (fp == NULL)
+        // 读取现有的 JSON 数据
+        fp = fopen(TRAINING_RECORD_FILE, "r");
+        cJSON *data_root = NULL;
+        cJSON *dataArray = NULL;
+
+        if (fp != NULL)
         {
-            fp = fopen(TRAINING_RECORD_FILE, "w+");
-            if (fp == NULL)
+            fseek(fp, 0, SEEK_END);
+            long fileSize = ftell(fp);
+            fseek(fp, 0, SEEK_SET);
+
+            jsonStr = (char *)malloc(fileSize + 1);
+            if (jsonStr != nullptr)
             {
-                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to create or open file for writing");
-                return false;
+                if (fread(jsonStr, fileSize, 1, fp) == 1)
+                {
+                    data_root = cJSON_Parse(jsonStr);
+                    if (data_root != NULL)
+                    {
+                        dataArray = cJSON_GetObjectItem(data_root, "data");
+                    }
+                }
             }
-        }
-
-        // 读取并解析现有的 JSON 数据
-        fseek(fp, 0, SEEK_END);
-        long fileSize = ftell(fp);
-        fseek(fp, 0, SEEK_SET);
-
-        char *jsonStr = (char *)malloc(fileSize + 1);
-        if (jsonStr == NULL)
-        {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to allocate memory for JSON data");
             fclose(fp);
-            return false;
         }
-        fread(jsonStr, 1, fileSize, fp);
-        fclose(fp);
 
-        cJSON *root = cJSON_Parse(jsonStr);
-        if (root == NULL)
+        if (dataArray == NULL)
         {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to parse JSON data");
-            free(jsonStr);
-            return false;
+            data_root = cJSON_CreateObject();
+            cJSON_AddItemToObject(data_root, "data", cJSON_CreateArray());
+            dataArray = cJSON_GetObjectItem(data_root, "data");
         }
 
         // 创建或更新数据节点
-        cJSON *dataArray = cJSON_GetObjectItem(root, "data");
         cJSON *sportData = cJSON_CreateObject();
         cJSON_AddNumberToObject(sportData, "sportTypeId", int(data->sportType));     // 训练项目类 Id
         cJSON_AddNumberToObject(sportData, "sportId", data->sportId);                // 训练项目 Id
@@ -1213,42 +1206,28 @@ namespace OHOS
         cJSON_AddNumberToObject(sportData, "avgHeartRate", data->avgheart);          // 训练平均心率
         cJSON_AddNumberToObject(sportData, "steps", data->steps);                    // 训练步数
         cJSON_AddNumberToObject(sportData, "intensity", data->intensity);            // 训练强度
-        cJSON_AddItemToArray(dataArray, sportData);
 
-        // 限制存储数量并删除多余数据
+        // 添加运动数据节点到数组并限制数量
+        cJSON_AddItemToArray(dataArray, sportData);
         while (cJSON_GetArraySize(dataArray) > MAX_DATA_COUNT)
         {
             cJSON_DeleteItemFromArray(dataArray, 0);
         }
 
         // 将更新后的 JSON 数据写入文件
-        char *jsonStrNew = cJSON_Print(root);
-        if (jsonStrNew == NULL)
-        {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to serialize JSON data");
-            cJSON_Delete(root);
-            free(jsonStr);
-            return false;
-        }
-
+        char *jsonStrNew = cJSON_Print(data_root);
         fp = fopen(TRAINING_RECORD_FILE, "w");
-        if (fp == NULL)
+        if (fp != NULL)
         {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to open file for writing");
-            cJSON_Delete(root);
-            free(jsonStr);
-            return false;
+            fwrite(jsonStrNew, strlen(jsonStrNew), 1, fp);
+            fclose(fp);
         }
 
-        fwrite(jsonStrNew, strlen(jsonStrNew), 1, fp);
-        fclose(fp);
-
         // 释放资源
-        cJSON_Delete(root);
+        cJSON_Delete(data_root);
         free(jsonStr);
         cJSON_free(jsonStrNew);
 
-        WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "SaveDataToJson succeeded");
         return true;
     }
 #endif