Rest Google FIT:获取食物类型(如香蕉、牛奶、意大利面、茶等)和膳食类型(如早餐、午餐、零食和晚餐)

Rest Google FIT:获取食物类型(如香蕉、牛奶、意大利面、茶等)和膳食类型(如早餐、午餐、零食和晚餐),rest,api,google-fit,Rest,Api,Google Fit,当使用Google Fit API消费食品时,我们能否检索食品类型(如香蕉、牛奶、意大利面、茶等)和膳食类型(如早餐、午餐、零食和晚餐) 营养数据通过MyFitnessPal输入 到目前为止,我只能使用GoogleFitAPI检索营养数据和消耗的总热量 如果Google Fit中存在此功能,请向我提供一些文档、链接或论文。我可以在文档中看到,它声明了前面提到的类型,但不确定如何检索它。任何帮助都将不胜感激。谢谢大家! 我可以在文档中看到,它说明了此处提到的类型,但不确定如何检索。 如果您阅读了提

当使用Google Fit API消费食品时,我们能否检索食品类型(如香蕉、牛奶、意大利面、茶等)和膳食类型(如早餐、午餐、零食和晚餐)

营养数据通过MyFitnessPal输入

到目前为止,我只能使用GoogleFitAPI检索营养数据和消耗的总热量


如果Google Fit中存在此功能,请向我提供一些文档、链接或论文。我可以在文档中看到,它声明了前面提到的类型,但不确定如何检索它。任何帮助都将不胜感激。谢谢大家!

我可以在文档中看到,它说明了此处提到的类型,但不确定如何检索。

如果您阅读了提供的相同文档链接,您将看到可以使用访问此字段

此类包含表示公共字段名的常量 数据类型,每个类型的前缀为字段。这些可用于访问和访问 通过DataPoint.getValue(字段)设置字段

可以找到一些实际使用它的代码片段:


它目前非常麻烦,因为它们没有提供将
转换为
HashMap
的方法,这是以可管理的方式获取营养素字段所必需的。

API提供了
asActivity
asFloat
asInt
asString
方法来转换
,但对于
映射
,不幸的是,您只能使用
getKeyValue
请求单个键

这是我目前的做法。实际上,我对需要查看预定义的键列表并使用
try-catch
语句感到不快,但当您请求地图中不存在的键时,会得到一个例外

    // 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()) {
                    Value nutrients = dp.getValue((Field.FIELD_NUTRIENTS));

                    Date date = new Date(dp.getStartTime(TimeUnit.MILLISECONDS));
                    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;
    }
//类定义中的某个地方
私有静态最终字符串TAG=“NutritionHistory”;
私有静态最终字符串[]数组=新字符串[]{
Field.U卡路里,
Field.营养素\总脂肪,
现场营养素、饱和脂肪、,
Field.营养素\不饱和脂肪,
Field.营养素\多不饱和脂肪,
现场营养素单不饱和脂肪,
Field.NUTRIENT\u TRANS\u FAT,
Field.u胆固醇,
Field.u钠,
田间营养钾,
田间营养素、总碳水化合物、,
Field.营养素和膳食纤维,
Field.U.糖,
场蛋白,
Field.营养素和维生素A,
Field.营养素和维生素C,
Field.U.钙,
铁矿场
};
//然后用于读取数据
公共阅读方法(长开始时间、长结束时间){
DataReadRequest=newDataReadRequest.Builder()
.aggregate(DataType.TYPE_营养,DataType.aggregate_营养摘要)
.bucketByTime(1,时间单位:天)
.setTimeRange(开始时间、结束时间、时间单位.毫秒).build();
DataReadResult DataReadResult=Fitness.HistoryApi.readData(googleFitManager.GetGoogleAppClient(),readRequest)
.等待(1,时间单位为分钟);
for(Bucket:dataReadResult.getbucket()){
List dataSets=bucket.getDataSets();
用于(数据集:数据集){
//获取单个数据点(每个日期一个)
对于(DataPoint dp:dataSet.getDataPoints()){
营养素值=dp.getValue((Field.Field_营养素));
日期日期=新日期(dp.getStartTime(TimeUnit.ms));
HashMap营养素=getNutrientsAsMap(营养素);
//对你的数据做点什么
// ...
}
}
}
}
//“魔法”发生的方法
私有HashMap getNutrientsAsMap(营养价值){
HashMap nutrientsMap=新HashMap();
用于(字符串nutrientKey:NUTRIENTS_SET){
试一试{
Float nutrientVal=营养素。getKeyValue(nutrientKey);
nutrientsMap.put(nutrientKey,nutrientVal);
}捕获(例外e){
}
}
返回营养素MAP;
}
    // 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()) {
                    Value nutrients = dp.getValue((Field.FIELD_NUTRIENTS));

                    Date date = new Date(dp.getStartTime(TimeUnit.MILLISECONDS));
                    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;
    }