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

标签 javascript imageview appcelerator placeholder

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

我的应用使用相机捕捉图像并将其保存到 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]);
}

不幸的是,当图 block 工作时,图像只显示图像占位符,而不是存储的图像。

我有 phonedisk,所以在为我的设备构建应用程序后,我可以查看应用程序目录和正在存储的图像。

我错过了什么?

最佳答案

想通了,谢谢大家的帮助;) <讽刺(才一天而已,我不记仇)

这是错误的地方,以防其他人遇到类似问题。

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

现在,即使有更新,它也总是指向正确的 applicationDataDirectory

关于javascript - ImageView 使用存储在 Titanium.Filesystem.applicationDataDirectory 的图像显示占位符,而不是图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5730983/

相关文章:

php - 基于 Web 的方法来确定 iPhone 是否通过 3G 或 Wifi 连接

javascript - 从vuejs应用程序调用JS库中的函数

javascript - 如何使用相同的按钮/div 在没有主体滚动的情况下切换覆盖

sms - Appcelerator钛 - 发送短信

javascript - Axios:如何正确取消请求拦截器内的请求?

java - 如何指定占位符图像?

android - Recycler View 中的 ImageView - 滚动会导致所有图像具有相同的宽度

android - 使用钛制加速器在 Canvas 上绘制

ios - 使用 Appcelerator 在 iOS 上退出应用程序时音频不在后台播放

android - Android 中 Imageview 的六边形形状存在一些问题?