2015-06-05 2 views
1

Я пытаюсь записать некоторые данные в текст с помощью устройства Samsung Gear 2. Я использую Tizen sdk. У меня есть следующий код, который я нашел от Tizen turorial for filesystem. Я могу нормально создать файл с моим кодом в папке с документами, но кажется, что я не мог написать что-то в этот файл. Мой файл пуст. EDIT: Мой код может записать значение сердечного ритма, но кажется, что каждый раз, когда он переписывается в том же месте файла. Наконец, я получил только одно значение для сердечного ритма. Как можно записать все значения сердечного ритма во время работы приложения.Запись файла в файловую систему Tizen

window.onload = function() { 
var initial = new Date().getTime(); 
var dataLength = 500; 
var dps = []; // dataPoints 
var historyDataLength = 5; 
var history = []; 
var temp = "nada"; 

function onsuccess(files) { 
     var testFile = null; 
     try{ 
      testFile = documentsDir.createFile("test.txt"); 
     if (testFile !== null) { 
     testFile.openStream(
      "w", 
      function(fs){ 
       fs.write(temp); 
       fs.close(); 
      }, function(e){ 
       console.log("Error " + e.message); 
      }, "UTF-8" 
     ); 
     } 
     } 
     catch (e) { // file already exist -> append content 
      testFile = documentsDir.resolve('test.txt'); 
      if(testFile !== null) 
      { 
       testFile.openStream(
        "w", 
        function(fs){ 
         fs.write(temp); 
         fs.close(); 
        }, function(e){ 
         console.log("Error " + e.message); 
        }, "UTF-8" 
       ); 
      } 
     } 
    } 
    function onerror(error) { 
     console.log("The error " + error.message + " occurred when listing the files in the selected folder"); 
    } 




var chart = new CanvasJS.Chart("chartContainer",{ 
    title :{ 
     fontColor: "#ccc", 
     text: "Heart Rate" 
    }, 
    backgroundColor: "#222", 
    data: [{ 
     color: "#CD5C5C", 
     type: "line", 
     dataPoints: dps 
    }] 
}); 
var lastSecond = -1; 
var updateChart = function (heartrate) { 
    time = new Date().getTime() - initial; 
    console.log("[" + time + ", " + heartrate + "]"); 
    temp = heartrate; 
    console.log("tempVar"+ temp); 

    tizen.filesystem.resolve(
      'documents', 
      function(dir){ 
       documentsDir = dir; dir.listFiles(onsuccess,onerror); 
      }, function(e) { 
       console.log("Error" + e.message); 
      }, "a" 
     ); 

    dps.push({ 
     x: time/1000.0, 
     y: heartrate 
    }); 
    if (dps.length > dataLength) 
    { 
     dps.shift();     
    } 
    var second = Math.round(time/1000.0); 
    console.log(history.length); 
    if(lastSecond != second) { 
     // TODO use avg heart rate instead of smapshot. 
     history.push({ 
      x: second, 
      y: heartrate 
     }); 
     if(history.length > historyDataLength) { 
      history.shift(); 
     } 
     lastSecond = second; 
    } 

    if(dps.length >= dataLength) { 
     chart.render(); 
    } 
    var hrchart = "<center>" + heartrate + "bps</center><table width='100%' cellpadding=4px>"; 
    for(var i = history.length - historyDataLength; i >= 0 && i < history.length; i++) { 
     hrchart += "<tr><td align='right' width='50%'>" + history[i].x + "s</td><td width='50%'>" + history[i].y + "bps</td></tr>"; 
    } 
    hrchart += "</table>"; 
    $('#textbox').html(hrchart); 
}; 

updateChart(0); 
updateChart(250); 
for(var i = 0; i < dataLength; i++) { 
    updateChart(0); 
} 

document.addEventListener('tizenhwkey', function(e) { 
    if(e.keyName == "back") 
     tizen.application.getCurrentApplication().exit(); 
}); 

window.webapis.motion.start("HRM", onchangedCB); 


function onchangedCB(hrmInfo) 
{ 
    if(hrmInfo.heartRate > 0) { 


      // add eventListener for tizenhwkey 
      document.addEventListener('tizenhwkey', function(e) { 
       if(e.keyName == "back") 

        tizen.application.getCurrentApplication().exit(); 
      }); 

     updateChart(hrmInfo.heartRate); 
    } else { 
     $('#textbox').html("No heart rate detected."); 
    } 
} 

}

В консоли, все console.log сообщения печатаются. Во-вторых, как я могу закрыть процесс записи с помощью кнопки? Это команда, которая останавливает процесс записи.

ответ

1

Я думаю, у вас есть проблема с переменной областью. Строка var documentsDir; в вашей функции window.onload определяет локальную переменную (которая будет пустой). Вместо этого вы хотите, чтобы эта функция использовала переменную documentsDir, созданную вами в вашей функции tizen.filesystem.resolve(). Прокомментируйте, что строка var в вашей onload (или переместите ее непосредственно перед вашей линией tizen.filesystem.resolve(, так что documentDir является одним и тем же внутри и снаружи функции onload.

+0

Я немного изменяю свой код. Мне удается написать один раз мой но я хочу написать переменную heartrate в файл с помощью функции append. Почему она просто перезаписывает переменную каждый раз? –

+0

Потому что вы не используете режим «append». Вы создаете новый файл и открываете его для Это не то же самое, что «добавление». – usr2564301

+0

Вы имеете в виду «w», чтобы изменить его на «a». Я меняю его и, похоже, работает, но это правильно одно значение рядом с другим. Я попытался добавить ' \ n 'новый символ линии, но кажется, что он не может распознать этот символ. –