ImageView使用存储在Titanium.Filesystem.applicationDataDirectory中的图像显示占位符,而不是图像。

7

我正在使用1.6.2版本的SDK进行开发。

我的应用程序使用相机捕获并将图像保存到Titanium.Filesystem.applicationDataDirectory。

点击应用程序应该显示所有已存储图像(详细信息[路径]存储在数据库中)平铺在屏幕上。

保存图像:

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);

存储到数据库:

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

db.close();

展示图片:
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]);
}

很遗憾,尽管瓷砖可以工作,但图像仅显示图像占位符,而不是存储的图像。

我使用了PhoneDisk,在为我的设备构建应用程序后,我可以查看应用程序目录并存储图像。

我错过了什么?

1个回答

10

搞定了,感谢大家的帮助;)< 讽刺(仅过去一天,我没有怨恨)

如果其他人遇到类似问题,这就是出错的地方。

// 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);

我将图片位置存储在数据库中时,存储的是完整路径bgImage.nativePath。然而,当我更新并重新构建应用程序后,应用程序的applicationDataDirectory已更改,因此存储的路径无效。

现在我只在数据库中存储var filename,并在显示它时使用以下方法:

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
});

现在,即使进行更新,它仍然始终指向正确的应用程序数据目录。


1
感谢您添加了自己的答案。两年后,至少有一个人看了这个! - Tony Adams

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接