Renato Probst
Renato Probst

Reputation: 6054

List files on directory on phonegap build

Hi im currently trying to create an gallery app with phonegap build, but i cant read files from the local storage. I`m using this function:

function listDir(directoryEntry){

 var directoryReader = directoryEntry.createReader();

 directoryReader.readEntries(function(entries){ // success get files and folders
    for(var i=0; i<entries.length; ++i){
      alert(entries[i].name) // this is just for checking purposes, no matter what  i       put here it wont fire
    }
 }, function(error){ // error get files and folders
    alert(error.code);
 });
}

  function getFileSystem(){
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fileSystem){ //    success get file system
    var sdcard = fileSystem.root;
    sdcard.getDirectory('dcim',{create:false}, function(dirEntry){
        listDir(dirEntry);
    }, function(error){
        alert(error.code);
    })
    }, function(evt){ // error get file system
        console.log(evt.target.error.code);
    });
  }


  getFileSystem();

The listDir function wont even fire (the error function wont too). I have tried to add an "OnDeviceReady" listener to call the getFileSystem() function but it wont work too, plus i have tried toons of ways, even using the official phonegap docs, but it cant read my directory. Anyone know how to do this (im currently using android)? Thanks in advance.

Upvotes: 2

Views: 1688

Answers (1)

Gonzalo Odiard
Gonzalo Odiard

Reputation: 1355

You need remember that the cordova api is async.

This code read the list of files in my app external storage directory:

    function getFilesList(callback) {
        console.log('getFilesList');
        var fileList = [];

        function onDirResolved(dir) {
            var reader =dir.createReader();
            reader.readEntries(function(entries) {
                console.log('readEntries');
                for (var i=0; i<entries.length; i++) {
                    if (entries[i].name.indexOf(".fototoon") != -1) {
                        fileList.push(entries[i].fullPath);
                    };
                };
                console.log('fileList ' + fileList);
                callback(fileList);
            }, errorHandler);
        };

        function onFsResolved(fs) {
            window.resolveLocalFileSystemURL(
                cordova.file.externalApplicationStorageDirectory,
                onDirResolved, errorHandler);
        };

        window.requestFileSystem(LocalFileSystem.PERSISTENT, 0,
            onFsResolved, errorHandler);

    };

The callback function will receive the list of files read.

Upvotes: 2

Related Questions