import androidx.appcompat.app.AppCompatActivity;
+import android.nfc.Tag;
import android.os.Bundle;
import android.widget.Button;
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;
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());
}
}
break;
case Intent.ACTION_TIME_TICK:
mWeatherHelper.startLocation(getApplicationContext(),false);
+ LocalDateTime currTime = LocalDateTime.now(ZoneId.systemDefault());
+ if(currTime.getHour() == 0){
+ pedProcess.startPedRunGetCount();
+ }
break;
}
}
return mDatabase.loadPedDao();
}
- public List<PedEntity> queryDBPedDate(LocalDate date) {
+ public List<PedEntity> queryDBPedDate(OffsetDateTime date) {
return getPedDao().loadDatePedList(date);
}
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;
}
import com.ic.work.db.entity.PedEntity;
-import org.threeten.bp.LocalDate;
import org.threeten.bp.OffsetDateTime;
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")
//更新记录
@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);
import androidx.room.Index;
import androidx.room.PrimaryKey;
-import org.threeten.bp.LocalDate;
import org.threeten.bp.OffsetDateTime;
@Entity(tableName = "icPedDb",
@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;
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;
}
}
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);
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;
private int mHeight;
private int mWeight;
+ private boolean isRuning = false;
+
public PedRunnable(PedInjection pedDB, int height, int weight) {
mPedDb = pedDB;
mHeight = height;
@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()) {
} 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);
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());
}
}
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);
}
}
-#Mon Mar 30 12:03:25 CST 2020
-VERSION_CODE=16
+#Tue Mar 31 16:59:40 CST 2020
+VERSION_CODE=18