ImageView с использованием изображения, хранящегося в Titanium.Filesystem.applicationDataDirectory, отображает заполнитель, а не изображение - PullRequest
7 голосов
/ 20 апреля 2011

Я разрабатываю с помощью 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]);
}

К сожалению, хотя плитки работают, изображения просто показывают заполнитель изображения, а не сохраненныйimage.

У меня есть phonedisk, поэтому после сборки приложения для моего устройства я могу просмотреть каталог приложения и изображения, которые хранятся.

Чего мне не хватает?

1 Ответ

10 голосов
/ 21 апреля 2011

Разобрался, спасибо всем за помощь;) <Сарказм (это был только день, я не держу обид) </p>

Вот что было не так в случае, если у кого-то еще есть подобная проблема.

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

Теперь, даже с обновлениями, он всегда указывает на правильное приложение DataDirectory

...