1.修复计步统计的时候重复插入数据的问题。
authorkfl_614 <kfl_614@163.com>
Tue, 31 Mar 2020 10:32:34 +0000 (18:32 +0800)
committerkfl_614 <kfl_614@163.com>
Tue, 31 Mar 2020 10:32:34 +0000 (18:32 +0800)
2.修复计步时间函数插入的时候不带时区。
3.添加到零点时候重置计步

app/src/main/java/com/ic/work/MainActivity.java
app/src/main/java/com/ic/work/WorkService.java
app/src/main/java/com/ic/work/db/PedInjection.java
app/src/main/java/com/ic/work/db/TiviTypeConverters.java
app/src/main/java/com/ic/work/db/dao/PedDao.java
app/src/main/java/com/ic/work/db/entity/PedEntity.java
app/src/main/java/com/ic/work/hardware/PedRecordRunnable.java
app/src/main/java/com/ic/work/hardware/PedRunnable.java
app/version_code.properties

index 691fc01..62511d2 100644 (file)
@@ -2,6 +2,7 @@ package com.ic.work;
 
 import androidx.appcompat.app.AppCompatActivity;
 
+import android.nfc.Tag;
 import android.os.Bundle;
 import android.widget.Button;
 
@@ -9,6 +10,9 @@ import com.ic.work.utils.IcLog;
 import com.ic.work.utils.PedUtil;
 import com.ic.work.utils.ServiceUtil;
 
+import org.threeten.bp.LocalDate;
+import org.threeten.bp.LocalDateTime;
+import org.threeten.bp.LocalTime;
 import org.threeten.bp.OffsetDateTime;
 import org.threeten.bp.format.DateTimeFormatter;
 
@@ -34,7 +38,9 @@ public class MainActivity extends AppCompatActivity {
         OffsetDateTime today = OffsetDateTime.now();
         IcLog.i(TAG,today.format(formatter));
 
-        BigDecimal bg = new BigDecimal(PedUtil.calcDistanceBySteps(170, 1000));
+        BigDecimal bg = new BigDecimal(PedUtil.calcDistanceBySteps(170, 3600));
         IcLog.i(TAG,""+bg.setScale(2, BigDecimal.ROUND_HALF_UP).floatValue());
+
+        IcLog.i(TAG,""+ LocalDateTime.of(LocalDate.now(), LocalTime.MIN).getHour());
     }
 }
index 75f5ca4..04fb72d 100644 (file)
@@ -250,6 +250,10 @@ public class WorkService extends Service {
                         break;
                     case Intent.ACTION_TIME_TICK:
                         mWeatherHelper.startLocation(getApplicationContext(),false);
+                        LocalDateTime currTime = LocalDateTime.now(ZoneId.systemDefault());
+                        if(currTime.getHour() == 0){
+                            pedProcess.startPedRunGetCount();
+                        }
                         break;
                 }
             }
index a0254a3..7322921 100644 (file)
@@ -36,7 +36,7 @@ public class PedInjection {
         return mDatabase.loadPedDao();
     }
 
-    public List<PedEntity> queryDBPedDate(LocalDate date) {
+    public List<PedEntity> queryDBPedDate(OffsetDateTime date) {
         return getPedDao().loadDatePedList(date);
     }
 
index 63207d0..d2dda52 100644 (file)
@@ -4,23 +4,23 @@ import android.text.TextUtils;
 
 import androidx.room.TypeConverter;
 
-import org.threeten.bp.LocalDate;
+import org.threeten.bp.OffsetDateTime;
 import org.threeten.bp.format.DateTimeFormatter;
 
 public class TiviTypeConverters {
 
-    private static final DateTimeFormatter formatter =  DateTimeFormatter.ISO_LOCAL_DATE;
+    private static final DateTimeFormatter formatter =  DateTimeFormatter.ISO_OFFSET_DATE_TIME;
 
     @TypeConverter
-    public static LocalDate toLocalDate(String value) {
+    public static OffsetDateTime toOffsetDateTime(String value) {
         if (TextUtils.isEmpty(value)) {
             return null;
         }
-        return formatter.parse(value,LocalDate.FROM);
+        return formatter.parse(value,OffsetDateTime.FROM);
     }
 
     @TypeConverter
-    public static String fromLocalDate(LocalDate date) {
+    public static String fromOffsetDateTime(OffsetDateTime date) {
         if (date == null) {
             return null;
         }
index 7cb31cd..c054b79 100644 (file)
@@ -6,7 +6,6 @@ import androidx.room.Query;
 
 import com.ic.work.db.entity.PedEntity;
 
-import org.threeten.bp.LocalDate;
 import org.threeten.bp.OffsetDateTime;
 
 import java.util.List;
@@ -15,13 +14,13 @@ import java.util.List;
 public interface PedDao {
 
     //查询时间对应的记录,可能为空。
-    @Query("SELECT * FROM icPedDb WHERE pedDate = :currDate ")
-    List<PedEntity> loadDatePedList(LocalDate currDate);
+    @Query("SELECT * FROM icPedDb WHERE date(pedDate) = date(:currDate)")
+    List<PedEntity> loadDatePedList(OffsetDateTime currDate);
 
     @Query("SELECT COUNT(id) FROM icPedDb")
     int queryCountPed();
 
-    @Query("SELECT * FROM icPedDb ORDER BY datetime(pedDate) limit 1")
+    @Query("SELECT * FROM icPedDb ORDER BY date(pedDate) limit 1")
     List<PedEntity> loadOldestDatePedList();
 
     @Query("SELECT * FROM icPedDb")
@@ -32,7 +31,7 @@ public interface PedDao {
 
     //更新记录
     @Query("UPDATE icPedDb SET pedNumber = :number , pedDistance = :distance  , pedCalorie = :calorie WHERE id = :id")
-    void updatePedEntity(int id, int number, float distance, float calorie);
+    void updatePedEntity(int id, int number, String distance, String calorie);
 
     @Query("DELETE FROM icPedDb  WHERE id = :id")
     void deletePedEntity(int id);
index 9b65131..fefc665 100644 (file)
@@ -4,7 +4,6 @@ import androidx.room.Entity;
 import androidx.room.Index;
 import androidx.room.PrimaryKey;
 
-import org.threeten.bp.LocalDate;
 import org.threeten.bp.OffsetDateTime;
 
 @Entity(tableName = "icPedDb",
@@ -13,9 +12,9 @@ public class PedEntity {
     @PrimaryKey(autoGenerate = true)
     private int id;
     private int pedNumber;
-    private float pedDistance;
-    private float pedCalorie;
-    private LocalDate pedDate;
+    private String pedDistance;
+    private String pedCalorie;
+    private OffsetDateTime pedDate;
 
     public int getId() {
         return id;
@@ -33,27 +32,27 @@ public class PedEntity {
         this.pedNumber = pedNumber;
     }
 
-    public float getPedDistance() {
+    public String getPedDistance() {
         return pedDistance;
     }
 
-    public void setPedDistance(float pedDistance) {
+    public void setPedDistance(String pedDistance) {
         this.pedDistance = pedDistance;
     }
 
-    public float getPedCalorie() {
+    public String getPedCalorie() {
         return pedCalorie;
     }
 
-    public void setPedCalorie(float pedCalorie) {
+    public void setPedCalorie(String pedCalorie) {
         this.pedCalorie = pedCalorie;
     }
 
-    public LocalDate getPedDate() {
+    public OffsetDateTime getPedDate() {
         return pedDate;
     }
 
-    public void setPedDate(LocalDate pedDate) {
+    public void setPedDate(OffsetDateTime pedDate) {
         this.pedDate = pedDate;
     }
 }
index 35eae9d..71b653a 100644 (file)
@@ -27,8 +27,8 @@ public class PedRecordRunnable implements Runnable {
        for (int i=0; i< query.size(); i++){
            RecordParcelable recordP = new RecordParcelable();
            recordP.setNumber(query.get(i).getPedNumber());
-           recordP.setCalorie(String.valueOf(query.get(i).getPedCalorie()));
-           recordP.setDistance(String.valueOf(query.get(i).getPedDistance()));
+           recordP.setCalorie(query.get(i).getPedCalorie());
+           recordP.setDistance(query.get(i).getPedDistance());
            recordP.setDate(query.get(i).getPedDate().format(formatter));
 
            recordList.add(recordP);
index d127058..0b8ea4e 100644 (file)
@@ -8,7 +8,8 @@ import com.ic.work.utils.IcLog;
 import com.ic.work.utils.PedUtil;
 
 import org.greenrobot.eventbus.EventBus;
-import org.threeten.bp.LocalDate;
+import org.threeten.bp.OffsetDateTime;
+import org.threeten.bp.ZoneId;
 
 import java.math.BigDecimal;
 import java.util.List;
@@ -22,6 +23,8 @@ public class PedRunnable implements Runnable {
     private int mHeight;
     private int mWeight;
 
+    private boolean isRuning = false;
+
     public PedRunnable(PedInjection pedDB, int height, int weight) {
         mPedDb = pedDB;
         mHeight = height;
@@ -39,16 +42,22 @@ public class PedRunnable implements Runnable {
     @Override
     public void run() {
         //1.先获取一次当前的计步数
+        if (isRuning) {
+            return;
+        }
+
+        isRuning = true;
+
         int currCount = HardwareUtils.getNdkStepCountValue();
         IcLog.i(TAG, "Ped Count" + currCount);
 
         int size = mPedDb.queryDBPedCount();
         if (size == 0) {
             //如果数据库中无记录,把当前数据插入到数据库中
-            insertDBPedEntity(currCount, LocalDate.now(),size);
+            insertDBPedEntity(currCount, getOffsetDateTime(), size);
         } else {
             //2.去查询数据中是否有当天的记录。
-            List<PedEntity> todayPed = mPedDb.queryDBPedDate(LocalDate.now());
+            List<PedEntity> todayPed = mPedDb.queryDBPedDate(getOffsetDateTime());
             if (todayPed != null && todayPed.size() > 0) {
                 //3.如果数据中有当天的数据,并更新数据
                 if (currCount > 0 && currCount > todayPed.get(0).getPedNumber()) {
@@ -58,30 +67,34 @@ public class PedRunnable implements Runnable {
             } else {
                 //4.如果数据库中没有当天的数据,则把当前的数据更新前一天的数据中
                 //  并且重置计步,并在数据库中新建一条数据
-                //重置计步
-                HardwareUtils.resetNdkStepCountValue();
+
                 //获取前一天的数据
-                List<PedEntity> beforePed = mPedDb.queryDBPedDate(LocalDate.now().minusDays(1));
+                List<PedEntity> beforePed = mPedDb.queryDBPedDate(getFrontOffsetDateTime());
                 if (beforePed != null && beforePed.size() > 0) {
+
                     beforePed.get(0).setPedNumber(currCount);
                     updateDBPedEntity(beforePed.get(0));
 
-                    insertDBPedEntity(0, LocalDate.now(),size);
+                    insertDBPedEntity(0, getOffsetDateTime(), size);
                     //发送给主线程。主线更新数据UI
                     EventBus.getDefault().post(new PedCountEvent(0));
                     return;
                 } else {
                     //如果没有前一天没有数据。则直接 插入今天的数据
-                    insertDBPedEntity(currCount, LocalDate.now(),size);
+                    insertDBPedEntity(currCount, getOffsetDateTime(), size);
                 }
+
+                //重置计步
+                HardwareUtils.resetNdkStepCountValue();
             }
         }
 
         //发送给主线程。主线更新数据UI
         EventBus.getDefault().post(new PedCountEvent(currCount));
+        isRuning = false;
     }
 
-    private PedEntity createEntity(int number, LocalDate date) {
+    private PedEntity createEntity(int number, OffsetDateTime date) {
 
         PedEntity entity = new PedEntity();
         entity.setPedNumber(number);
@@ -92,12 +105,12 @@ public class PedRunnable implements Runnable {
         return entity;
     }
 
-    private void insertDBPedEntity(int number, LocalDate date,int size) {
+    private void insertDBPedEntity(int number, OffsetDateTime date, int size) {
         //判断 size 超过
-        if(size >= 60){
+        if (size >= 60) {
             //删除一条最早的数据
             List<PedEntity> entities = mPedDb.queryDBPedOldestList();
-            if(entities != null && entities.size() == 1){
+            if (entities != null && entities.size() == 1) {
                 mPedDb.deletePedEntity(entities.get(0).getId());
             }
         }
@@ -111,13 +124,21 @@ public class PedRunnable implements Runnable {
         mPedDb.updateDBPedDate(entity);
     }
 
-    private float getCalorieValue(int number) {
+    private String getCalorieValue(int number) {
         BigDecimal bg = new BigDecimal(PedUtil.calcConsumeEnergy(mHeight, mWeight, number));
-        return bg.setScale(2, BigDecimal.ROUND_HALF_UP).floatValue();
+        return String.valueOf(bg.setScale(2, BigDecimal.ROUND_HALF_UP).floatValue());
     }
 
-    private float getDistanceValue(int number) {
+    private String getDistanceValue(int number) {
         BigDecimal bg = new BigDecimal(PedUtil.calcDistanceBySteps(mHeight, number));
-        return bg.setScale(2, BigDecimal.ROUND_HALF_UP).floatValue();
+        return String.valueOf(bg.setScale(2, BigDecimal.ROUND_HALF_UP).floatValue());
+    }
+
+    private OffsetDateTime getOffsetDateTime() {
+        return OffsetDateTime.now(ZoneId.systemDefault());
+    }
+
+    private OffsetDateTime getFrontOffsetDateTime() {
+        return getOffsetDateTime().minusDays(1);
     }
 }
index b30dd98..17a1daf 100644 (file)
@@ -1,2 +1,2 @@
-#Mon Mar 30 12:03:25 CST 2020
-VERSION_CODE=16
+#Tue Mar 31 16:59:40 CST 2020
+VERSION_CODE=18