2011-08-06 25 views
6

me trataron writing/reading un archivo en phonegap+android, aquí está la configuración:escritura y el archivo de lectura en PhoneGap

$(document).ready(function() { 
    document.addEventListener("deviceready", deviceready, true); 

    $(document).bind("deviceready", function(){ 
    //writeFile(); 
    //readFile(); 
    }); 
}); 

function deviceready() { 
    writeFile(); 
    readFile(); 
} 

// This is just to do this. 
function readFile() { 
    var d = navigator.file.read('/sdcard/foo.xml', success(), fail()); 
    console.warn(d); 
} 

function writeFile() { 
    navigator.file.write('/sdcard/foo.xml', "This is a test of writing to a file", 
      success(), fail()); 
} 

Pero en el emulador para Android 2.2, obtuve el siguiente mensaje de error:

08-06 14:21:29.428: INFO/Web Console(936): Error in success callback: Network Status1 = TypeError: Result of expression 'navigator.file' [undefined] is not an object. at file:///android_asset/www/phonegap.0.9.6.js:649 

¿Qué podría faltar y qué podría intentarse?

+1

podría ser el que está utilizando el éxito() en lugar de éxito en su llamada de vuelta mismo ocurre con Despiste() debe fallar –

Respuesta

-1

las siguientes obras para mí en Android con PhoneGap-1.0.0:

<script type="text/javascript" charset="utf-8" src="css-js/phonegap-1.0.0.js"></script> 
    <script type="text/javascript" charset="utf-8"> 

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

    // PhoneGap is ready 
    // 
    function onDeviceReady() { 
     window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail); 

    } 

    function gotFS(fileSystem) { 
     var path = "readme.txt"; 
     fileSystem.root.getFile(path, {create: true, exclusive: false}, gotFileEntry, fail); 

    } 

    function gotFileEntry(fileEntry) { 

     fileEntry.createWriter(gotFileWriter, fail); 
    } 

    function gotFileWriter(writer) { 
     writer.onwrite = function(evt) { 
      console.log("write success"); 
     }; 
     writer.write("some sample text"); 
</script> 
+1

acaba de publicar el código de ejemplo. sin siquiera vincular para dar crédito. – jlarson

+0

Esto ni siquiera lee el archivo –

+0

escribiendo el archivo funciona bien para mí –

2

También funciona en Android 2.2. Llamas a la carga(); Funciona desde body onload y writeFileFromSDCard (string) desde el botón onClick, pasando como parámetro la cadena que desea escribir en el archivo.

<script type="text/javascript" charset="utf-8"> 

// Event listener  
function load() { 
    document.addEventListener('deviceready', init, false); 
} 

// Called when device is ready - Do nothing 
    function init() { 
}  

// Called to write file to card 
    function writeFileFromSDCard(param) { 

    var writer = new FileWriter("/sdcard/write.txt"); 
    writer.write(param + "\n", false);    
    alert("file Written to SD Card"); 
} 

</script> 
+0

¿Puedo preguntarle por qué sabe cómo usar la API: FileWriter? – Stallman

+0

le pregunto por qué sabe cómo usar la API: FileWriter? Hago referencia a http://www.w3.org/TR/file-system-api/#dfn-filewriter pero no mencionaba este instrumento: FileWriter ("ruta"); Y a medida que uso la clase Media (~), la configuración de la ruta no necesita "/ sdcard /" y ¿por qué necesitamos agregar esta ruta en FileWriter? Encontré una pequeña descripción sobre la API. Por favor ayuda, gracias! – Stallman

+0

¿Qué tipo de camino podemos pasar allí? Yo también no encuentro ninguna información específica sobre eso? – trainoasis

1

Esto es lo que se me ocurrió basado en varios enlaces. Yo había estado buscando hacer esto también. He utilizado este sitio como referencia http://www.digitalnoiz.com/mobile-development/mobile-file-explorer-with-phonegapcordova-and-jquery-mobile-part-1/, así como las referencias de la API Phonegap documento

function displayMessage(msg) 
{ 
    navigator.notification.alert(msg); 
} 

function loadDirectories(fileSystem) 
{ 
    directoryEntry = fileSystem.root; 

    var directoryReader = directoryEntry.createReader(); 

    directoryReader.readEntries(function(entries){ 
      var sOutput = ""; 
      for(var i=0; i < entries.length; i++) 
      { 
       if(!entries[i].isDirectory) 
       { 
        fileSystem.root.getFile(entries[i].name,null,gotFileEntry,fail); 
       } 
      }        
      //displayMessage(sOutput); 
     },fail); 
} 
function gotFileEntry(fileEntry) 
{ 
    fileEntry.file(function(file){ 
     var reader = new FileReader(); 
     reader.onloadend = function(evt){ 
     displayMessage(evt.target.result); 
    }; 
reader.readAsText(file);       
    },fail); 
} 
function failFile(evt) 
{ 
    displayMessage(evt.target.error.code); 
} 
function fail(error) 
{ 
    displayMessage("Failed to list directory contents: " + error.code); 
} 
function onBodyLoad() 
{  
document.addEventListener("deviceready", onDeviceReady, false); 
}  
function onDeviceReady() 
{ 
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, loadDirectories, fail); 
} 
Cuestiones relacionadas