0

我一直在尝试为 google fit 应用程序创建自定义数据类型,但遇到了一些错误。最初 ConfigApi.createCustomDataType 收到以下错误

“不能从静态上下文引用非静态方法‘createCustomDataType (com.google.android.gms.common.api.GoolgeApiClient, com.google.android.gms.fitness.request.DataTypeCreateRequest)”

因此,我实例化了 ConfigApi 以绕过该错误,然后在运行应用程序时出现以下错误:

java.lang.NullPointerException:尝试在空对象引用上调用接口方法“void com.google.android.gms.common.api.PendingResult.setResultCallback(com.google.android.gms.common.api.ResultCallback)”

该错误出现在这一行:pendingResult.setResultCallback

我希望有人能帮助我解决我做错的事情,然后再开始制造比我已经拥有的更大的混乱。以下是我正在使用的代码:

    // build a request to create a new data type
    DataTypeCreateRequest request = new DataTypeCreateRequest.Builder()
            .setName(myPackageName)
            .addField("custom", Field.FORMAT_INT32)
            .build();

    // invoke the CONFIG API with (Google API client object and create data type request)

    // instantiating ConfigApi due to the following error:
    // non-static method createCustomDataType cannot be referenced from a static context 

    ConfigApi configApi = new ConfigApi() {
        @Override
        public PendingResult<DataTypeResult> createCustomDataType(GoogleApiClient googleApiClient, DataTypeCreateRequest dataTypeCreateRequest) {
            return null;
        }

        @Override
        public PendingResult<DataTypeResult> readDataType(GoogleApiClient googleApiClient, String s) {
            return null;
        }

        @Override
        public PendingResult<Status> disableFit(GoogleApiClient googleApiClient) {
            return null;
        }
    };

    PendingResult<DataTypeResult> pendingResult =
            configApi.createCustomDataType(mClient, request);
    /** 
      * ConfigApi.createCustomDataType was getting the following error:
      * non-static method 'createCustomDataType 
      * (com.google.android.gms.common.api.GoolgeApiClient,
      * com.google.android.gms.fitness.request.DataTypeCreateRequest)
      * cannot be referenced from a static context
      */

    // 3. Check the result asynchronously
    // (The result may not be immediately available)
    pendingResult.setResultCallback(
            new ResultCallback<DataTypeResult>() {
                @Override
                public void onResult(DataTypeResult dataTypeResult) {

                    if (dataTypeResult.getStatus().isSuccess()){
                        DataType customType = dataTypeResult.getDataType();
                        // Use this custon data type to insert data in your app
                        onDataTypeAvailable(customType);
                    }

                    // Retrieve the created data type
                    // Use this custom data type to insert data in your app
                    // (see other examples)

                }
            }
    );
}
4

3 回答 3

3

创建 GoogleApiClient 时,请确保添加配置 API:

 GoogleApiClient client = new GoogleApiClient.Builder()
     .addApi(Fitness.CONFIG_API)
     ...
     .build();
于 2015-04-11T06:39:02.623 回答
0

您可能想要使用 Fitness.ConfigApi 而不是创建自己的 ConfigApi 实现。

于 2015-04-10T17:31:27.890 回答
0

扩展古加的第一个答案(有点晚,但以防其他人有同样的问题):

我有同样的问题。事实证明,概览中的示例代码(您可能在这里找到了,正如我所做的那样)可能并不完全正确。在 Google 的 ConfigApi 文档(此处)的一个示例中,类似的方法readDataType()被以不同的方式调用(尽管错误的调用也会在那里重复一次)。

将示例应用于createCustomDataType(),调用应如下所示:

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

(当然,不要忘记将正确的 API 添加到您的客户端。)

于 2016-11-20T17:36:18.233 回答