我一直在尝试为google fit应用程序创建自定义数据类型,但我遇到了一些错误。最初ConfigApi.createCustomDataType收到以下错误
“非静态方法”createCustomDataType(com.google.android.gms.common.api.GoolgeApiClient,com.google.android.gms.fitness.request.DataTypeCreateRequest)无法从静态上下文引用“
所以我实例化了ConfigApi以绕过该错误,然后在运行应用程序时出现以下错误:
java.lang.NullPointerException:尝试在null上调用接口方法'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)
}
}
);
}
答案 0 :(得分:3)
创建GoogleApiClient时,请务必添加配置API:
GoogleApiClient client = new GoogleApiClient.Builder()
.addApi(Fitness.CONFIG_API)
...
.build();
答案 1 :(得分:0)
您可能希望使用Fitness.ConfigApi而不是创建自己的ConfigApi实现。
答案 2 :(得分:0)
扩展Guga的第一个答案(有点晚,但以防其他人有同样的问题):
我遇到了完全相同的问题。事实证明,概述中的示例代码(您可能找到here,正如我所做的那样)可能不完全正确。在Google的ConfigApi文档(here)中的一个示例中,类似的方法readDataType()被称为不同的方式(尽管错误的调用也会重复一次)。
将示例应用于createCustomDataType(),调用应如下所示:
PendingResult pendingResult = Fitness.ConfigApi.createCustomDataType(mClient, request);
(当然,不要忘记向您的客户添加正确的API。)