我正在尝试创建一个类似于 Google 文档的自定义 DataType。
https://developers.google.com/fit/datatypes/custom
我可以成功创建 DataType 和 Field,但没有设置它的值。这是代码。
public void writeCustomDatatype() throws ExecutionException, InterruptedException {
// Write data to Fit
Task<DataType> response = Fitness.getConfigClient(this, getGoogleAccount())
.createCustomDataType(new DataTypeCreateRequest.Builder()
.setName("com.google.android.gms.fit.samples.stepcounter.CustomDataGender1")
.addField("custom", Field.FORMAT_INT32)
.build());
// Get data to Fit
response = Fitness.getConfigClient(this, getGoogleAccount())
.readDataType("com.google.android.gms.fit.samples.stepcounter.CustomDataGender1")
.addOnSuccessListener(new OnSuccessListener<DataType>() {
@Override
public void onSuccess(DataType dataType) {
dataTypeGender = dataType;
updateGender();
Log.w(TAG, "Success in getting the gender" + dataType);
}
}).addOnFailureListener(
new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.w(TAG, "There was a problem getting the gender.", e);
}
});
}
// Updating Gender
private Task<Void> updateGender() {
// Create a new dataset and update request.
DataSet dataSet = updateGenderData();
long startTime = 0;
long endTime = 0;
// Get the start and end times from the dataset.
for (DataPoint dataPoint : dataSet.getDataPoints()) {
startTime = dataPoint.getStartTime(TimeUnit.MILLISECONDS);
endTime = dataPoint.getEndTime(TimeUnit.MILLISECONDS);
}
// [START update_data_request]
Log.i(TAG, "Updating the Gender! - dataset in the History API.");
DataUpdateRequest request =
new DataUpdateRequest.Builder()
.setDataSet(dataSet)
.setTimeInterval(startTime, endTime, TimeUnit.MILLISECONDS)
.build();
// Invoke the History API to update data.
return Fitness.getHistoryClient(this, GoogleSignIn.getLastSignedInAccount(this))
.updateData(request)
.addOnCompleteListener(
new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
// At this point the data has been updated and can be read.
Log.i(TAG, "Data update was successful for Gender.");
} else {
Log.e(TAG, "There was a problem updating the dataset.", task.getException());
}
}
});
}
// Update the Gender Data
private DataSet updateGenderData(){
Log.i(TAG, "Creating a new data update request.");
Calendar cal = Calendar.getInstance();
Date now = new Date();
cal.setTime(now);
cal.add(Calendar.MINUTE, 0);
long endTime = cal.getTimeInMillis();
cal.add(Calendar.MINUTE, 0);
long startTime = cal.getTimeInMillis();
// Create a data source
DataSource dataSource =
new DataSource.Builder()
.setAppPackageName(this)
.setDataType(dataTypeGender)
.setStreamName(TAG + " - Gender")
.setType(DataSource.TYPE_RAW)
.build();
DataSet dataSet = DataSet.create(dataSource);
DataPoint dataPoint = dataSet.createDataPoint().setTimeInterval(startTime, endTime, TimeUnit.MILLISECONDS);
Value value = dataPoint.getValue(Field.custom(gender));
dataPoint.getValue(Field.FORMAT_STRING).setString(gender);
String test = value.toString();
dataSet.add(dataPoint);
// [END build_update_data_request]
return dataSet;
}
这两行都不起作用。Field.custom 的第一行不存在,因此即使我创建了 Field 和相应的 DataType,它在 IDE 中也是红色的。在第二行 dataPoint.getValue() 中,getValue() 方法需要一个字段,而现在没有其他字段真正起作用。
Value value = dataPoint.getValue(Field.custom(gender));
dataPoint.getValue(Field.FORMAT_STRING).setString(gender);
我需要一个字段,即使我创建了一个名为 custom 的自定义数据类型字段,我也无法使用一个名为 custom 的字段。这是来自我的调试器。
数据类型{com.google.android.gms.fit.samples.stepcounter.CustomDataGender1[custom(i)]}。
当我使用适用于预定义数据类型的自定义数据类型时,我无法设置自定义数据类型的值。像 TYPE.FIELD_WEIGHT 或 TYPE.FIELD_HEIGHT。这是一个例子:
DataPoint dataPoint =
dataSet.createDataPoint().setTimeInterval(startTime, endTime, TimeUnit.MILLISECONDS);
dataPoint.getValue(Field.FIELD_HEIGHT).setFloat(heightDecimalMoved);
例如,这对我来说不是一个解决方案。我已经尝试了多种设置自定义字段的变体,它们目前都不起作用。 在 Google Fit 中为自定义数据类型设置数据点
这也是我使用上面的代码生成的自定义数据类型的样子。我使用整数作为格式,这就是为什么它说是 (i)。
数据类型{com.google.android.gms.fit.samples.stepcounter.CustomDataGender1[custom(i)]}
Google 预定义的 DataType 的 DataType 看起来像这样,这次是字符串格式。
数据类型{com.google.weight[weight(f)]}
任何想法要做什么或如何进行?我可以为自定义 DataType 创建一个具有原始数据类型的自定义字段。但是,我无法设置类似于来自 GoogleFit 的预定义 DataTypes 和我上面提供的示例的值,以及预定义的 DataTypes Weight 和 Height。
https://developers.google.com/android/reference/com/google/android/gms/fitness/data/DataType