2014-12-03 2 views
0

Я пытаюсь создать и custom datatype и добавить в него значение.добавить значения в пользовательские dataType Поля

Я успешно создал 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] 
         } 

Я не могу найти способ заполнить значения в этих двух полях.

ответ

0

Я столкнулся с этой проблемой.

док говорит использовать getVaule:

dataPoint.getValue(0).setInt(mField1IntValue);  

Проблема является метод getVaule хочет поле. После игры вокруг с этим я обнаружил, что вы можете получить список полей:

dataSet.getDataType().getFields() 

Так, чтобы установить пользовательский DateType Fields Я использую этот метод.

dataPoint.getValue(dataSet.getDataType().getFields().get(0)).setInt(5); 

Не знаю, что это правильно или глупо, но это работает.

+0

Теперь я могу успешно добавить данные, но теперь не могу их прочитать. Получил метод для чтения. но всегда это говорит об Утрехте. https://developer.android.com/reference/com/google/android/gms/fitness/ConfigApi.html – Dhrupal

+0

downvote, потому что это зависит от порядка типов данных, очень хаки –

4

docs на это легкие рабочие детали. Ниже приведен рабочий пример.

Начнем с написания некоторых пользовательских данных. Я собираюсь создать поле под названием flightcount (как на лестничных пролетах, которые пользователь поднял во время сеанса), это int.

Я разместил этот код, где мой FitnessClient запускает обратный вызов onConnected. Обратите внимание, что я храню тип данных в качестве переменной mCustomType члена, мы будем нуждаться в том, что позже:

DataTypeCreateRequest request = new DataTypeCreateRequest.Builder() 
     // The prefix of your data type name must match your app's package name 
     .setName("com.digitalconstruction.flightthepower.flights") 
       // Add a custom field 
     .addField("flightcount", Field.FORMAT_INT32) 
       // Add some common fields 
     .addField(Field.FIELD_ACTIVITY) 
     .build(); 


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


pendingResult.setResultCallback(
     new ResultCallback<DataTypeResult>() { 
    @Override 
    public void onResult(DataTypeResult dataTypeResult) { 
     // Retrieve the created data type 
     mCustomType = dataTypeResult.getDataType(); 
    } 
} 

);

Вставка набора данных довольно тривиальна, но создания настраиваемого набора данных не было, так что вот пример кода. Создайте источник данных, затем набор данных, затем набор данных. Обратите особое внимание на создание DataPoint, его отличается от образца кода Google, который даже не компилируется:

 // Create a data source 
    DataSource climbDataSource = new DataSource.Builder() 
      .setAppPackageName(this.getPackageName()) 
      .setDataType(mCustomType) 
      .setName(SAMPLE_SESSION_NAME) 
      .setType(DataSource.TYPE_RAW) 
      .build(); 

    // Create a data set of the climb flight count to include in the session. 
    DataSet climbDataSet = DataSet.create(climbDataSource); 

    // Create a data point for a data source that provides 
    DataPoint dataPoint = DataPoint.create(climbDataSource); 

    // Set values for the data point 
    // This data type has one custom fields (int) and a common field 
    //tricky way to set single int 
    dataPoint.getValue(mCustomType.getFields().get(0)).setInt(8); 
    dataPoint.setTimeInterval(startTime, endTime, TimeUnit.MILLISECONDS); 
    //tricky way to set activity, not at all how the non-working google sample code is set up 
    FitnessActivities.setValue(dataPoint, FitnessActivities.STAIR_CLIMBING); 

    climbDataSet.add(dataPoint); 

Наконец, мы хотим, чтобы прочитать эти данные, метод dumpDataSet можно найти here.

//read custom data type: mCustomType 
     Calendar cal = Calendar.getInstance(); 
     Date now = new Date(); 
     cal.setTime(now); 
     long endTime = cal.getTimeInMillis(); 
     cal.add(Calendar.WEEK_OF_YEAR, -1); 
     long startTime = cal.getTimeInMillis(); 

     final DataReadRequest readRequest = new DataReadRequest.Builder() 
       .read(mCustomType) 
       .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS) 
       .build(); 

     DataReadResult dataReadResult = 
       Fitness.HistoryApi.readData(mClient, readRequest).await(1, TimeUnit.MINUTES); 

     dumpDataSet(dataReadResult.getDataSet(mCustomType)); 

И это работает, вот некоторые из выхода:

03-06 12: 52: 30,445 31506-31746/com.digitalconstruction.flightthepower I/MARK: Поле: flightcount Значение: 8

03-06 12: 52: 30,445 31506-31746/com.digitalconstruction.flightthepower I/MARK: Область: активность Значение: 77

Надеется, что это помогает.

+0

Как настроен ваш клиент GoogleApi, потому что .. ,Я использовал ваш код в качестве шаблона для своего собственного объекта данных и ... в то время как DataSet содержит данные, запрос API показывает, что в API ничего не было написано. Вам нужно «передать» DataSet API? – azariah

+0

Ничего, ..... понял. : P Это было в этой ссылке. – azariah

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