public static interface HealthDataResolver.AggregateRequest
AggregateRequest
You can make a request instance with HealthDataResolver.AggregateRequest.Builder.build().
HealthDataResolver.AggregateRequest.Builder.build()
To know the average body temperature by tags, you can set an AggregateRequest object with:
setDataType()
addFunction()
addGroup()
public class HealthDataResolverExample { // The state of connection private HealthDataStore mStore; public static final String APP_TAG = "MyApp"; private void getAverageTemperatureByTag(long startTime, long endTime) { HealthDataResolver.AggregateRequest request = new HealthDataResolver.AggregateRequest.Builder() .setDataType(HealthConstants.BodyTemperature.HEALTH_DATA_TYPE) .addFunction(HealthDataResolver.AggregateRequest.AggregateFunction.AVG, HealthConstants.BodyTemperature.TEMPERATURE, "avr_temperature") .addGroup(HealthConstants.BodyTemperature.COMMENT, "tag") .setLocalTimeRange(HealthConstants.BodyTemperature.START_TIME, HealthConstants.BodyTemperature.TIME_OFFSET, startTime, endTime) .build();
HealthDataResolver resolver = new HealthDataResolver(mStore, null); try { resolver.aggregate(request).setResultListener(mTempAggrResult); } catch (Exception e) { Log.d(APP_TAG, "Aggregating health data fails."); } }
COMMENT
tag
avr_temperature
private final HealthResultHolder.ResultListener<HealthDataResolver.AggregateResult> mTempAggrResult= new HealthResultHolder.ResultListener<HealthDataResolver.AggregateResult>() { @Override public void onResult(HealthDataResolver.AggregateResult result) { try { Iterator<HealthData> iterator = result.iterator(); if (iterator.hasNext()) { HealthData data = iterator.next(); // Gets the tag name String tag = data.getString("tag"); // Gets the average temperature float temperature = data.getFloat("avr_temperature"); // ... } } finally { result.close(); } } }; }
You can set an AggregateRequest object with:
setTimeGroup()
setSort()
public class HealthDataResolverExample { // The state of connection private HealthDataStore mStore; public static final String APP_TAG = "MyApp"; private void getDailyGlucose(long startTime, long endTime) { HealthDataResolver.AggregateRequest request = new HealthDataResolver.AggregateRequest.Builder() .setDataType(HealthConstants.BloodGlucose.HEALTH_DATA_TYPE) .addFunction(HealthDataResolver.AggregateRequest.AggregateFunction.AVG, HealthConstants.BloodGlucose.GLUCOSE, "average") .setTimeGroup(HealthDataResolver.AggregateRequest.TimeGroupUnit.DAILY, 1, HealthConstants.BloodGlucose.START_TIME, HealthConstants.BloodGlucose.TIME_OFFSET, "day") .setLocalTimeRange(HealthConstants.BloodGlucose.START_TIME, HealthConstants.BloodGlucose.TIME_OFFSET, startTime, endTime) .setSort("days", HealthDataResolver.SortOrder.DESC) .build();
HealthDataResolver resolver = new HealthDataResolver(mStore, null); try { resolver.aggregate(request).setResultListener(mGlucoseAggrResult); } catch (Exception e) { Log.d(APP_TAG, "Aggregating health data fails."); } }
DAILY
day
average
DESC
private final HealthResultHolder.ResultListener<HealthDataResolver.AggregateResult> mGlucoseAggrResult = new HealthResultHolder.ResultListener<HealthDataResolver.AggregateResult>() { @Override public void onResult(HealthDataResolver.AggregateResult result) { try { Iterator<HealthData> iterator = result.iterator(); if (iterator.hasNext()) { HealthData data = iterator.next(); // Gets day information String tag = data.getString("day"); // Gets the average glucose float avg = data.getFloat("average"); // ... } } finally { result.close(); } }; }
static class
HealthDataResolver.AggregateRequest.AggregateFunction
HealthDataResolver.AggregateRequest.Builder
HealthDataResolver.AggregateRequest
HealthDataResolver.AggregateRequest.TimeGroupUnit