From fa85d12234f25dd79376e79883f03f266624a7c8 Mon Sep 17 00:00:00 2001 From: kfl_614 Date: Tue, 31 Mar 2020 18:32:34 +0800 Subject: [PATCH] =?utf8?q?1.=E4=BF=AE=E5=A4=8D=E8=AE=A1=E6=AD=A5=E7=BB=9F?= =?utf8?q?=E8=AE=A1=E7=9A=84=E6=97=B6=E5=80=99=E9=87=8D=E5=A4=8D=E6=8F=92?= =?utf8?q?=E5=85=A5=E6=95=B0=E6=8D=AE=E7=9A=84=E9=97=AE=E9=A2=98=E3=80=82?= =?utf8?q?=202.=E4=BF=AE=E5=A4=8D=E8=AE=A1=E6=AD=A5=E6=97=B6=E9=97=B4?= =?utf8?q?=E5=87=BD=E6=95=B0=E6=8F=92=E5=85=A5=E7=9A=84=E6=97=B6=E5=80=99?= =?utf8?q?=E4=B8=8D=E5=B8=A6=E6=97=B6=E5=8C=BA=E3=80=82=203.=E6=B7=BB?= =?utf8?q?=E5=8A=A0=E5=88=B0=E9=9B=B6=E7=82=B9=E6=97=B6=E5=80=99=E9=87=8D?= =?utf8?q?=E7=BD=AE=E8=AE=A1=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../main/java/com/ic/work/MainActivity.java | 8 ++- .../main/java/com/ic/work/WorkService.java | 4 ++ .../java/com/ic/work/db/PedInjection.java | 2 +- .../com/ic/work/db/TiviTypeConverters.java | 10 ++-- .../main/java/com/ic/work/db/dao/PedDao.java | 9 ++-- .../java/com/ic/work/db/entity/PedEntity.java | 19 ++++--- .../ic/work/hardware/PedRecordRunnable.java | 4 +- .../com/ic/work/hardware/PedRunnable.java | 53 +++++++++++++------ app/version_code.properties | 4 +- 9 files changed, 71 insertions(+), 42 deletions(-) diff --git a/app/src/main/java/com/ic/work/MainActivity.java b/app/src/main/java/com/ic/work/MainActivity.java index 691fc01..62511d2 100644 --- a/app/src/main/java/com/ic/work/MainActivity.java +++ b/app/src/main/java/com/ic/work/MainActivity.java @@ -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()); } } diff --git a/app/src/main/java/com/ic/work/WorkService.java b/app/src/main/java/com/ic/work/WorkService.java index 75f5ca4..04fb72d 100644 --- a/app/src/main/java/com/ic/work/WorkService.java +++ b/app/src/main/java/com/ic/work/WorkService.java @@ -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; } } diff --git a/app/src/main/java/com/ic/work/db/PedInjection.java b/app/src/main/java/com/ic/work/db/PedInjection.java index a0254a3..7322921 100644 --- a/app/src/main/java/com/ic/work/db/PedInjection.java +++ b/app/src/main/java/com/ic/work/db/PedInjection.java @@ -36,7 +36,7 @@ public class PedInjection { return mDatabase.loadPedDao(); } - public List queryDBPedDate(LocalDate date) { + public List queryDBPedDate(OffsetDateTime date) { return getPedDao().loadDatePedList(date); } diff --git a/app/src/main/java/com/ic/work/db/TiviTypeConverters.java b/app/src/main/java/com/ic/work/db/TiviTypeConverters.java index 63207d0..d2dda52 100644 --- a/app/src/main/java/com/ic/work/db/TiviTypeConverters.java +++ b/app/src/main/java/com/ic/work/db/TiviTypeConverters.java @@ -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; } diff --git a/app/src/main/java/com/ic/work/db/dao/PedDao.java b/app/src/main/java/com/ic/work/db/dao/PedDao.java index 7cb31cd..c054b79 100644 --- a/app/src/main/java/com/ic/work/db/dao/PedDao.java +++ b/app/src/main/java/com/ic/work/db/dao/PedDao.java @@ -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 loadDatePedList(LocalDate currDate); + @Query("SELECT * FROM icPedDb WHERE date(pedDate) = date(:currDate)") + List 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 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); diff --git a/app/src/main/java/com/ic/work/db/entity/PedEntity.java b/app/src/main/java/com/ic/work/db/entity/PedEntity.java index 9b65131..fefc665 100644 --- a/app/src/main/java/com/ic/work/db/entity/PedEntity.java +++ b/app/src/main/java/com/ic/work/db/entity/PedEntity.java @@ -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; } } diff --git a/app/src/main/java/com/ic/work/hardware/PedRecordRunnable.java b/app/src/main/java/com/ic/work/hardware/PedRecordRunnable.java index 35eae9d..71b653a 100644 --- a/app/src/main/java/com/ic/work/hardware/PedRecordRunnable.java +++ b/app/src/main/java/com/ic/work/hardware/PedRecordRunnable.java @@ -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); diff --git a/app/src/main/java/com/ic/work/hardware/PedRunnable.java b/app/src/main/java/com/ic/work/hardware/PedRunnable.java index d127058..0b8ea4e 100644 --- a/app/src/main/java/com/ic/work/hardware/PedRunnable.java +++ b/app/src/main/java/com/ic/work/hardware/PedRunnable.java @@ -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 todayPed = mPedDb.queryDBPedDate(LocalDate.now()); + List 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 beforePed = mPedDb.queryDBPedDate(LocalDate.now().minusDays(1)); + List 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 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); } } diff --git a/app/version_code.properties b/app/version_code.properties index b30dd98..17a1daf 100644 --- a/app/version_code.properties +++ b/app/version_code.properties @@ -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 -- 2.17.1