2011-04-20 24 views
6

Estoy desarrollando con SDK 1.6.2.ImageView usando la imagen almacenada en Titanium.Filesystem.applicationDataDirectory muestra el marcador de posición, no la imagen

Mi aplicación utiliza la cámara para capturar y guardar una imagen en Titanium.Filesystem.applicationDataDirectory.

Se supone que un toque de la aplicación muestra todas las imágenes almacenadas (detalles [camino] almacenados en la base de datos) en mosaico en la pantalla.

guardar la imagen:

var image = event.media // from camera success 

var filename = new Date().getTime() + "-ea.jpg"; 

bgImage = Titanium.Filesystem.getFile(Titanium.Filesystem.applicationDataDirectory, filename); 

bgImage.write(image); 

Almacenamiento de base de datos:

var db = Titanium.Database.open('photoDB'); 
try{ 
    db.execute('INSERT INTO stored (image) VALUES (?)', bgImage.nativePath); 
} catch(e) { 
    alert(e.message); 
} 

db.close(); 

Mostrando las Imágenes:

imageArray = []; 
images = []; 

var db = Titanium.Database.open('photoDB'); 
var dbrows = db.execute('select id, date, image from stored order by date asc'); 

while (dbrows.isValidRow()) { 

    imageArray.push({ 
     image:dbrows.fieldByName('image') 
    }); 

    dbrows.next(); 
} 

dbrows.close(); 

// loop thru and display images 
for (var i = 0; i < imageArray.length; i++){ 

    var pushleft = (i % 4) * 75; // tile from left 
    var pushtop = Math.floor(i/4) * 96; // determine how far from top 

    var file = Titanium.Filesystem.getFile(imageArray[i].image); 

    images[i] = Ti.UI.createImageView({ 
     image: imageArray[i].image, // path to image at applicationDataDirectory 
     width: 75, 
     height: 96, 
     left: pushleft + 5, // logic for positioning 
     top: pushtop + 5, // logic for positioning 
     store_id: imageArray[i].id 
    }); 

    win.add(images[i]); 
} 

Desafortunadamente, mientras las fichas funcionan, las imágenes solo muestran el marcador de posición de la imagen, no la imagen almacenada.

Tengo un Phonedisk, así que después de crear la aplicación para mi dispositivo puedo ver el directorio de la aplicación y las imágenes se están almacenando.

¿Qué me estoy perdiendo?

Respuesta

9

lo descubrió, gracias a todos por la ayuda;) < sarcasmo (Sólo ha pasado un día, no tengo rencores)

es lo que estaba mal en el caso de que alguien más tiene un problema similar aquí.

// Create a file name 
var filename = new Date().getTime() + "-ea.jpg"; 

// Create the file in the application directory 
bgImage = Titanium.Filesystem.getFile(Titanium.Filesystem.applicationDataDirectory, filename); 

// Write the image to the new file (image created from camera) 
bgImage.write(image); 

Cuando estaba Almacenamiento de la ubicación de la imagen en la base de datos que estaba almacenando la ruta completa bgImage.nativePath. Sin embargo, cuando actualicé y reconstruí la aplicación, las aplicaciones applicationDataDirectory cambiaron, por lo que la ruta almacenada no era válida.

Así que ahora sólo almacenar var filename en la base de datos y cuando visualizo así:

images[i] = Ti.UI.createImageView({ 
    image: Titanium.Filesystem.applicationDataDirectory + Ti.Filesystem.separator + imageArray[i].image, // path to image at applicationDataDirectory 
    width: 75, 
    height: 96, 
    left: pushleft + 5, // logic for positioning 
    top: pushtop + 5, // logic for positioning 
    store_id: imageArray[i].id 
}); 

Ahora, incluso con actualizaciones, siempre apunta a la applicationDataDirectory adecuada

+1

Gracias por añadir su propia respuesta . Dos años después, ¡al menos una persona miró esto! –

+0

jaja, no hay problema Tony! Me alegro de que haya ayudado. – joseym

Cuestiones relacionadas