Почему в этом случае не работает this.health? - PullRequest
1 голос
/ 05 августа 2020

Я создаю приложение, использующее Healthkit. Когда я запускаю приложение, я получаю сообщение об ошибке TypeError: Cannot read property 'health' of null. Я попытался сделать navigator.health, но получил сообщение об ошибке, что здоровье не существует в навигаторе. Я предполагаю, что это довольно простая проблема, чтобы исправить, как мне правильно вызвать здоровье в этом случае?

import { Component } from '@angular/core';
import { Platform } from "@ionic/angular";
import { Geolocation } from '@ionic-native/geolocation/ngx';
import { Health } from '@ionic-native/health/ngx';

declare var shake;
var min_speed = 0.2;

@Component({
  selector: 'app-motion-analysis',
  templateUrl: './motion-analysis.page.html',
  styleUrls: ['./motion-analysis.page.scss'],
})
export class MotionAnalysisPage {
  constructor(public platform: Platform, private health: Health){}

  ionViewDidEnter() {
    this.platform.ready().then(() => {
      this.health.isAvailable()
            .then((available:boolean) => {
              console.log(available);
              this.health.requestAuthorization([
                {
                  read: ['steps'],       //read only permission
                }
              ])
              .then(res => console.log(res))
              .catch(e => console.log(e));
            })
            .catch(e => console.log(e));

      function onShake() {
        console.log("shake")
        navigator.geolocation.getCurrentPosition(onSuccess, onError, {
          maximumAge: 1000,
          timeout: 10000,
          enableHighAccuracy : true,
        });
  
        function onSuccess(position){
          if(position.coords.speed > min_speed){
            this.health.query({
              startDate: new Date(new Date().getTime() - 10*1000 ), // ten sec ago
              endDate: new Date(), // now
              dataType: 'steps',
              limit: 1000
            }).then(data=>{
              console.log(data);
            }).catch(e => {
              console.log("error "+ e);
            })
          }
        }
      };
      
      function onError(err) {
        console.log(err)
      };

      // Start watching for shake gestures and call "onShake"
      shake.startWatch(onShake, 5, onError);

    })
  }
}

edit, ссылка на учебник, и я имею в виду this.health.query({, упоминая для краткости. Я не получаю эту ошибку, если не включаю этот раздел кода.

edit2: Решено, просто нужно было сохранить его значение с помощью стрелочных функций или новой переменной.

1 Ответ

0 голосов
/ 05 августа 2020

Если вы используете V3 Ioni c установите плагины ниже

    $ ionic cordova plugin add cordova-plugin-health
    $ npm install --save @ionic-native/health@4

И в Компонент import { Health } from '@ionic-native/health';

...