读一些香蕉:
// Somewhere in your class definitions
private static final String TAG = "NutritionHistory";
private static final String[] NUTRIENTS_ARRAY = new String[] {
Field.NUTRIENT_CALORIES,
Field.NUTRIENT_TOTAL_FAT,
Field.NUTRIENT_SATURATED_FAT,
Field.NUTRIENT_UNSATURATED_FAT,
Field.NUTRIENT_POLYUNSATURATED_FAT,
Field.NUTRIENT_MONOUNSATURATED_FAT,
Field.NUTRIENT_TRANS_FAT,
Field.NUTRIENT_CHOLESTEROL,
Field.NUTRIENT_SODIUM,
Field.NUTRIENT_POTASSIUM,
Field.NUTRIENT_TOTAL_CARBS,
Field.NUTRIENT_DIETARY_FIBER,
Field.NUTRIENT_SUGAR,
Field.NUTRIENT_PROTEIN,
Field.NUTRIENT_VITAMIN_A,
Field.NUTRIENT_VITAMIN_C,
Field.NUTRIENT_CALCIUM,
Field.NUTRIENT_IRON
};
// Then for reading data
public someMethodForReading(long startTime, long endTime) {
DataReadRequest readRequest = new DataReadRequest.Builder()
.aggregate(DataType.TYPE_NUTRITION, DataType.AGGREGATE_NUTRITION_SUMMARY)
.bucketByTime(1, TimeUnit.DAYS)
.setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS).build();
DataReadResult dataReadResult = Fitness.HistoryApi.readData(googleFitManager.getGoogleApiClient(), readRequest)
.await(1, TimeUnit.MINUTES);
for (Bucket bucket : dataReadResult.getBuckets()) {
List<DataSet> dataSets = bucket.getDataSets();
for (DataSet dataSet : dataSets) {
// Getting individual datapoints (one for each date)
for (DataPoint dp : dataSet.getDataPoints()) {
Date date = new Date(dp.getStartTime(TimeUnit.MILLISECONDS));
String foodItem = dp.getValue(FIELD_FOOD_ITEM).asString();
int mealType = dp.getValue(FIELD_MEAL_TYPE).asInt();
Value nutrients = dp.getValue((Field.FIELD_NUTRIENTS));
HashMap<String, Float> nutrients = getNutrientsAsMap(nutrients);
// Do something with your data
// ...
}
}
}
}
// The method where the 'magic' happens
private HashMap<String, Float> getNutrientsAsMap(Value nutrients) {
HashMap<String, Float> nutrientsMap = new HashMap<>();
for (String nutrientKey : NUTRIENTS_SET) {
try {
Float nutrientVal = nutrients.getKeyValue(nutrientKey);
nutrientsMap.put(nutrientKey, nutrientVal);
} catch (Exception e) {
}
}
return nutrientsMap;
}