2015-04-10 3 views
0

Я пытался создать пользовательский тип данных для приложения, подходящего для Google, и я столкнулся с несколькими ошибками. Первоначально ConfigApi.createCustomDataType получал следующую ошибкуСоздание пользовательского DataType для GoogleFit

«не статический метод«createCustomDataType (com.google.android.gms.common.api.GoolgeApiClient, com.google.android.gms.fitness.request.DataTypeCreateRequest) не может можно ссылаться из статического контекста»

Я инстанцирован в ConfigApi, чтобы обойти эту ошибку, а затем я получил следующее сообщение об ошибке, когда я запустил приложение:

java.lang.NullPointerException: Попытка вызвать метод интерфейса пустоты 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) 

       } 
      } 
    ); 
} 

ответ

3

При создании GoogleApiClient, убедитесь, чтобы добавить конфигурационный API:

GoogleApiClient client = new GoogleApiClient.Builder() 
    .addApi(Fitness.CONFIG_API) 
    ... 
    .build(); 
+0

Спасибо, я не понимал, что могу добавить несколько API-интерфейсов в GoogleApiClient –

0

Вы, вероятно, хотите использовать Fitness.ConfigApi вместо того, чтобы создавать свои собственные реализации ConfigApi.

+0

Спасибо, поэтому я изменил его на Fitness.ConfigApi, и теперь я получаю сообщение об ошибке для этой строки, в которой утверждается, что Api не запрашивался. –

0

Чтобы расширить на первом ответе GUGA (в немного поздно, но только в том случае, другие имеют один и тот же вопрос):

У меня была такая же проблема. Оказывается, что пример кода из обзора (который, вероятно, вы нашли here, как и я) может быть не совсем правильным. В примере из документации Google ConfigApi (here) аналогичный метод readDataType() называется другим способом (хотя некорректный вызов повторяется и там).

Применяя пример createCustomDataType(), вызов должен быть следующим:

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

(. И, конечно же, не забудьте добавить правильный API для вашего клиента)

Смежные вопросы