0

PhoneGap を使用して、iPhone 加速度計を使用した歩数計アプリを開発しています。

以下は、現在実行中のコードのコピーです。

<!DOCTYPE html>
<html>

<head>
  <title>Accelerometer</title>

  <script type="text/javascript" charset="utf-8" src="js/cordova-1.7.0rc1.js"></script>

  <script type="text/javascript" charset="utf-8">
    // The watch id references the current `watchAcceleration`
    var watchID = null;
    var stepCount = 0;
    window.localStorage.setItem('exp');
    var expGain = 0;
    var totalExp = window.localStorage.getItem('exp');
    var userAge = window.localStorage.getItem('age');
    var handicap = 0;

    if (userAge <= 10) {
      handicap = 10;
    } else if (userAge > 10) {
      handicap = 5;
    }

    // Wait for PhoneGap to load
    //
    document.addEventListener("deviceready", onDeviceReady, false);

    // PhoneGap is ready
    //e7
    function onDeviceReady() {
      startWatch();
    }

    // Start watching the acceleration
    //
    function startWatch() {

      // Update acceleration every 5 seconds
      var options = {
        frequency: 1000
      };

      watchID = navigator.accelerometer.watchAcceleration(onSuccess, onError, options);
    }

    // Stop watching the acceleration
    //
    function stopWatch() {
      if (watchID) {
        navigator.accelerometer.clearWatch(watchID);
        watchID = null;
      }
    }

    //count steps and calculate experience gained
    function countSteps(accelx, timestamp, expGain, totalExp) {
      var element = document.getElementById('accelerometer');
      //var accCount = Math.round(acceleration.x);
      //stepCount = stepCount + Math.abs(accCount);
      stepCount = stepCount + 1;
      expGain = stepCount * handicap;
      totalExp = totalExp + expGain;
      //window.localStorage.setItem('exp', totalExp);       
      element.innerHTML = '<br>Step Count: ' + stepCount + '<br/>' +
        'Acceleration X: ' + Math.abs(accelx) + '<br />' +
        'Timestamp: ' + timestamp + '<br />' +
        'Experience: ' + totalExp + '<br />';
    }

    // onSuccess: Get a snapshot of the current acceleration
    //
    function onSuccess(acceleration) {
      var element = document.getElementById('accelerometer');
      var accelx = Math.round(acceleration.x)
      var timestamp = acceleration.timestamp
      //element.innerHTML = 'Acceleration X: ' + Math.abs(accelx) + '<br />' +
      //'Acceleration Y: ' + acceleration.y + '<br />' +
      //'Acceleration Z: ' + acceleration.z + '<br />' + 
      //'Timestamp: '      + acceleration.timestamp + '<br />';
      if (Math.abs(accelx) > 1) {
        countSteps(accelx, timestamp, expGain, totalExp);
      }
    }

    // onError: Failed to get the acceleration
    //
    function onError() {
      alert('onError!');
    }
  </script>
  <link media="only screen and (max-device-width: 480px)" href="css/iPhone.css" rel="stylesheet" type="text/css">
</head>

<body>
  <div id="accelerometer">Waiting for accelerometer...</div>
  <button onclick="startWatch();">Start Watching</button>
  <button onclick="stopWatch();">Stop Watching</button>
  <br />
  <p><a href="index.html">back</a>
  </p>
</body>

</html>

"undefined"問題は、 の結果の次を取得し続けることですwindow.localStorage.setItem('exp');。私たちはこれを解決するために一日中取り組んできました。

4

2 に答える 2

3

setItem2 つの引数 (キーと値) を取ります。引数を指定しない場合、undefinedがデフォルト値になります。

window.localStorage.setItem('exp');意味window.localStorage.setItem('exp', undefined);

他の値が必要な場合は、それを指定する必要があります。

于 2012-05-17T11:34:19.490 に答える
2

localStorage.setItem は 2 番目のパラメーターを必要としませんか? やってみました:

window.localStorage.setItem("exp","");
于 2012-05-17T11:33:47.233 に答える