优化训练记录;解决训练结束死机bug 238/2
authorCaisking <3449750381@qq.com>
Fri, 7 Jun 2024 11:47:39 +0000 (19:47 +0800)
committerCaisking <3449750381@qq.com>
Fri, 7 Jun 2024 11:47:39 +0000 (19:47 +0800)
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingModel.h
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingModel.cpp
code/sdk/application/wearable/fd230app/nativeui/traingrecord/include/TraingRecordModel.h
code/sdk/application/wearable/fd230app/nativeui/traingrecord/src/TraingRecordModel.cpp

index ab8a358..ebe56f0 100644 (file)
@@ -88,15 +88,15 @@ extern "C"
         uint32_t cir;
         // 最高海拔高度
         uint32_t alt;
-        //平均配速
+        // 平均配速
         uint32_t apc;
-        //最快配速
+        // 最快配速
         uint32_t fpc;
-        //最慢配速
+        // 最慢配速
         uint32_t spc;
-        //步幅
+        // 步幅
         uint32_t std;
-        //步频
+        // 步频
         uint32_t cdc;
     };
     Trainingdata *read_Trainingdata_data(char *timedata, uint16_t offset);
@@ -176,7 +176,7 @@ namespace OHOS
         int heart;                // 运动心率
         int avgheart;             // 训练平均心率
         int tag;                  // 训练目标
-        int pc;                   //训练配速
+        int pc;                   // 训练配速
         std::string start_date;   // 训练开始日期
         std::string start_time;   // 训练开始时间
         std::string end_time;     // 训练结束时间
@@ -286,7 +286,7 @@ namespace OHOS
         /*保存训练记录到json文件*/
         bool CheckDataJson();
         bool SaveDataToJson(SportData *data);
-        SportData *LoadDateFeomJson();
+        std::vector<SportData> LoadDataFormJson();
 
     private:
         TraingModel(const TraingModel &) = delete;
index f76687a..e2ced55 100644 (file)
@@ -41,6 +41,7 @@
 #include <limits.h>
 #include <list>
 #include "samgr_lite.h"
+#include <vector>
 
 #define MAX_FILE_PATH_LENGTH 128
 #define TRAINING_DATA_DIRECTORY "user/userdata/sport/"
@@ -60,6 +61,7 @@
 #define HIGH_INTENSITY_LOWER_THRESHOLD 70
 #define HIGH_INTENSITY_UPPER_THRESHOLD 79
 
+extern "C" errcode_t uapi_get_timestampe_ms(uint32_t *tm);
 extern "C" void custom_VibratorFunc(OHOS::VibratorType vibratorType);
 
 #ifdef __cplusplus
@@ -280,19 +282,17 @@ namespace OHOS
         if (state != ExerciseState::General)
         {
             /*运动开始并且是app发起的运动*/
-            if (Openingway == true && state != ExerciseState::End)
+            if (Openingway == true)
             {
                 sendtraningstatedata(static_cast<uint8_t>(state), sportdata->duration);
             }
             else
             {
-#if 0
                 /*手表发起并且是结束状态*/
                 if (state == ExerciseState::End)
                 {
                     sendtraningstateend();
                 }
-#endif
             }
         }
         sportState_ = state;
@@ -468,16 +468,6 @@ namespace OHOS
             Startstate = false;
             Endstate = true;
 
-            /*保存数据之后再发送结束消息*/
-            if (Openingway == true)
-            {
-                sendtraningstatedata(static_cast<uint8_t>(ExerciseState::End), sportdata->duration);
-            }
-            else
-            {
-                sendtraningstateend();
-            }
-
             printf("结束运动\r\n");
         }
     }
@@ -704,7 +694,7 @@ namespace OHOS
         }
 /*json读取测试*/
 #if READTEST
-        SportData *sportDataArray = LoadDateFeomJson();
+        SportData *sportDataArray = LoadDataFormJson();
         if (sportDataArray != nullptr)
         {
             int dataCount = 0;
@@ -1202,13 +1192,13 @@ namespace OHOS
         return true;
     }
     /* 加载训练数据函数 */
-    SportData *TraingModel::LoadDateFeomJson()
+    std::vector<SportData> TraingModel::LoadDataFormJson()
     {
         std::ifstream file(TRAINING_RECORD_FILE);
         if (!file.is_open())
         {
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to open file");
-            return nullptr;
+            return std::vector<SportData>();
         }
 
         std::string jsonData((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>());
@@ -1217,8 +1207,8 @@ namespace OHOS
         cJSON *root = cJSON_Parse(jsonData.c_str());
         cJSON *dataArray = cJSON_GetObjectItem(root, "data");
 
-        int dataCount = cJSON_GetArraySize(dataArray); // 获取数组大小
-        SportData *sportDataArray = new SportData[dataCount];
+        int dataCount = cJSON_GetArraySize(dataArray);
+        std::vector<SportData> sportDataVector;
 
         for (int i = 0; i < dataCount; i++)
         {
@@ -1236,10 +1226,10 @@ namespace OHOS
             sportData.steps = cJSON_GetObjectItem(item, "steps")->valueint;
             sportData.intensity = cJSON_GetObjectItem(item, "intensity")->valueint;
 
-            sportDataArray[i] = sportData;
+            sportDataVector.push_back(sportData);
         }
 
         cJSON_Delete(root);
-        return sportDataArray;
+        return sportDataVector;
     }
 }
\ No newline at end of file
index d926850..617789b 100644 (file)
@@ -1,3 +1,9 @@
+/***
+ * @Date: 2024-05-20 19:40:41
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-06-07 18:46:11
+ * @FilePath: /XTS_FD230/FD230/code/sdk/application/wearable/fd230app/nativeui/traingrecord/include/TraingRecordModel.h
+ */
 
 #ifndef TraingRecord_MODEL_H
 #define TraingRecord_MODEL_H
@@ -21,8 +27,8 @@ namespace OHOS
         static TraingRecordModel &GetInstance(void);
         void InitTraingRecordListItem();
         const TraingRecordItem *GetTraingRecordlistItems() const;
-        uint8_t GetTraingRecordListNum() const;
-        //设置标志位
+        uint8_t GetTraingRecordListNum();
+        // 设置标志位
         bool GetJsonStatus();
 
     private:
@@ -31,6 +37,7 @@ namespace OHOS
         TraingRecordModel &operator=(const TraingRecordModel &);
         virtual ~TraingRecordModel();
         static const uint16_t TraingRecordListMaxNum = 10;
+        uint8_t ArrayNum;
         TraingRecordItem TraingRecords[TraingRecordListMaxNum] = {0, nullptr, nullptr, nullptr};
         // std::map<int, AppViewId> TraingRecordIdToViewId;
         bool jsonStatus{false}; // json文件存在标志位
index fe082a9..f4cd050 100644 (file)
@@ -1,10 +1,8 @@
 /***
- * @Author: Caisking 3449750381@qq.com
- * @Date: 2024-03-26 18:34:15
+ * @Date: 2024-05-20 19:40:41
  * @LastEditors: Caisking 3449750381@qq.com
- * @LastEditTime: 2024-03-26 18:36:25
- * @FilePath: /sdk/application/wearable/fd230app/nativeui/traing/training_list_Record/src/TraingRecordModel.cpp
- * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ * @LastEditTime: 2024-06-07 17:41:18
+ * @FilePath: /XTS_FD230/FD230/code/sdk/application/wearable/fd230app/nativeui/traingrecord/src/TraingRecordModel.cpp
  */
 
 #include "traingrecord/include/TraingRecordModel.h"
@@ -18,6 +16,7 @@
 #include "components/ui_label_ext.h"
 #include "language/font/ui_resource_string.h"
 #include "traing/include/TraingModel.h"
+#include <vector>
 
 namespace OHOS
 {
@@ -32,7 +31,7 @@ namespace OHOS
         return instance;
     }
 
-    //设置标志位
+    // 设置标志位
     bool TraingRecordModel::GetJsonStatus()
     {
         jsonStatus = TraingModel::GetInstance()->CheckDataJson();
@@ -42,19 +41,19 @@ namespace OHOS
     void TraingRecordModel::InitTraingRecordListItem()
     {
         // 1.读取json数据
-        SportData *sportDataArray = TraingModel::GetInstance()->LoadDateFeomJson();
-        if (sportDataArray != nullptr)
+        std::vector<SportData> sportDataVector = TraingModel::GetInstance()->LoadDataFormJson();
+        if (!sportDataVector.empty())
         {
-            int dataCount = 0;
-            for (int i = 0; i < TraingRecordListMaxNum; i++) // 最多只有10条数据
+            ArrayNum = sportDataVector.size();
+            for (int i = 0; i < ArrayNum && i < TraingRecordListMaxNum; i++) // 最多只有10条数据
             {
-                SportData sportData = sportDataArray[i];
+                SportData sportData = sportDataVector[i];
                 // 2.获取训练类
                 std::string imageicon = TraingModel::GetInstance()->GetSportIcon(sportData.sportType);
                 // 3.获取日期
                 // 4.获取时间
                 TraingRecords[i] = {i, imageicon.c_str(), sportData.start_date, sportData.start_time};
-#if 0
+#if 1
                 // 使用 printf 输出每条训练记录的信息 [测试]
                 printf("Training Record %d:\n", i + 1);
                 printf("Sport Type: %s\n", imageicon.c_str());
@@ -69,8 +68,8 @@ namespace OHOS
     {
         return TraingRecords;
     }
-    uint8_t TraingRecordModel::GetTraingRecordListNum() const
+    uint8_t TraingRecordModel::GetTraingRecordListNum() 
     {
-        return TraingRecordListMaxNum;
+        return ArrayNum;
     }
 }
\ No newline at end of file