ImageView 使用存储在 Titanium.Filesystem.applicationDataDirectory 的图像显示占位符,而不是图像
Posted
技术标签:
【中文标题】ImageView 使用存储在 Titanium.Filesystem.applicationDataDirectory 的图像显示占位符,而不是图像【英文标题】:ImageView using image stored at Titanium.Filesystem.applicationDataDirectory displays placeholder, not image 【发布时间】:2011-08-09 12:20:21 【问题描述】:我正在使用 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]);
不幸的是,虽然图块正常工作,但图像只是显示图像占位符,而不是存储的图像。
我有 phonedisk,所以在为我的设备构建应用程序后,我可以查看应用程序目录和正在存储的图像。
我错过了什么?
【问题讨论】:
【参考方案1】:想通了,谢谢大家的帮助;)
如果其他人有类似的问题,这里是错误的。
// 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
【讨论】:
感谢您添加自己的答案。两年后,至少有一个人看到了这个!以上是关于ImageView 使用存储在 Titanium.Filesystem.applicationDataDirectory 的图像显示占位符,而不是图像的主要内容,如果未能解决你的问题,请参考以下文章
使用 Titanium 滚动时禁用 TableView 垂直反弹
使用存储在服务器中的图像路径在 android studio 中显示 ImageView