在自定义数据类型字段中添加值

Dhr*_*pal 1 android google-fit-sdk google-fit

我正在尝试创建和自定义数据类型并为其添加值。

我已成功创建 2 个字段,我正在回电。我的代码是

    // Subscribe to some data sources!
                            DataTypeCreateRequest  request = new DataTypeCreateRequest.Builder()
                                    // The prefix of your data type name must match your app's package name
                                    .setName("com.fitnessapi.data_type")
                                            // Add some custom fields, both int and float
                                    .addField("one", Field.FORMAT_FLOAT)
                                    .addField("two", Field.FORMAT_FLOAT)
                                    .addField(Field.FIELD_ACTIVITY)
                                    .build();



                            PendingResult<DataTypeResult> pendingResult = Fitness.ConfigApi.createCustomDataType(mClient, request);
                            request.


                            pendingResult.setResultCallback(
                                    new ResultCallback<DataTypeResult>() {
                                        @Override
                                        public void onResult(DataTypeResult dataTypeResult) {
                                            // Retrieve the created data type
                                            DataType customType = dataTypeResult.getDataType();
                                            System.out.println("one two" + customType.toString());


                                        }
                                    }
                            );

                            // [START auth_build_googleapiclient_ending]
                        }
Run Code Online (Sandbox Code Playgroud)

我无法找到任何方法来填充这两个字段中的值。

Mar*_*eel 5

这方面的文档对工作细节很简单。下面是一个工作示例。

\n\n

让我们从编写一些自定义数据开始,我将创建一个名为 Flightcount 的字段(就像用户在会话期间爬过的楼梯一样),它是一个 int。

\n\n

我将此代码放在 FitnessClient 触发 onConnected 回调的位置。请注意,我将数据类型存储为成员变量 mCustomType,稍后我们将需要它:

\n\n
    DataTypeCreateRequest request = new DataTypeCreateRequest.Builder()\n        // The prefix of your data type name must match your app\'s package name\n        .setName("com.digitalconstruction.flightthepower.flights")\n                // Add a custom field\n        .addField("flightcount", Field.FORMAT_INT32)\n                // Add some common fields\n        .addField(Field.FIELD_ACTIVITY)\n        .build();\n\n\nPendingResult<DataTypeResult> pendingResult =\n        Fitness.ConfigApi.createCustomDataType(mClient, request);\n\n\npendingResult.setResultCallback(\n        new ResultCallback<DataTypeResult>() {\n    @Override\n    public void onResult(DataTypeResult dataTypeResult) {\n        // Retrieve the created data type\n        mCustomType = dataTypeResult.getDataType();\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

);

\n\n

插入数据集相当简单,但创建自定义数据集却并非如此,因此这里是示例代码。创建数据源,然后创建数据集,然后创建数据点。请特别注意数据点的创建,它与 Google 示例代码不同,甚至无法编译:

\n\n
        // Create a data source\n    DataSource climbDataSource = new DataSource.Builder()\n            .setAppPackageName(this.getPackageName())\n            .setDataType(mCustomType)\n            .setName(SAMPLE_SESSION_NAME)\n            .setType(DataSource.TYPE_RAW)\n            .build();\n\n    // Create a data set of the climb flight count to include in the session.\n    DataSet climbDataSet = DataSet.create(climbDataSource);\n\n    // Create a data point for a data source that provides\n    DataPoint dataPoint = DataPoint.create(climbDataSource);\n\n    // Set values for the data point\n    // This data type has one custom fields (int) and a common field\n    //tricky way to set single int\n    dataPoint.getValue(mCustomType.getFields().get(0)).setInt(8);\n    dataPoint.setTimeInterval(startTime, endTime, TimeUnit.MILLISECONDS);\n    //tricky way to set activity, not at all how the non-working google sample code is set up\n    FitnessActivities.setValue(dataPoint, FitnessActivities.STAIR_CLIMBING);\n\n    climbDataSet.add(dataPoint);\n
Run Code Online (Sandbox Code Playgroud)\n\n

最后我们想要读取这些数据,可以在这里找到方法 dumpDataSet 。

\n\n
//read custom data type: mCustomType\n        Calendar cal = Calendar.getInstance();\n        Date now = new Date();\n        cal.setTime(now);\n        long endTime = cal.getTimeInMillis();\n        cal.add(Calendar.WEEK_OF_YEAR, -1);\n        long startTime = cal.getTimeInMillis();\n\n        final DataReadRequest readRequest = new DataReadRequest.Builder()\n                .read(mCustomType)\n                .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)\n                .build();\n\n        DataReadResult dataReadResult =\n                Fitness.HistoryApi.readData(mClient, readRequest).await(1, TimeUnit.MINUTES);\n\n        dumpDataSet(dataReadResult.getDataSet(mCustomType));\n
Run Code Online (Sandbox Code Playgroud)\n\n

它有效,这是一些输出:

\n\n

03-06 12:52:30.445 31506-31746/com.digitalconstruction.flightthepower I/MARK\xef\xb9\x95 字段:flightcount 值:8

\n\n

03-06 12:52:30.445 31506-31746/com.digitalconstruction.flightthepower I/MARK\xef\xb9\x95 字段:活动 值:77

\n\n

希望这可以帮助。

\n