0

Я создаю небольшое приложение с использованием инструментов Visual Studio и кордоны. Приложение отображает ряд вопросов, и на каждом из них пользователь может делать несколько фотографий и рисовать их.img из ms-appdata: /// local, не показывающий использование Winjs/cordova

Приложение, нацеленное на Windows 8.1, но в будущем будет нацелено на андроид, поэтому я попытался не использовать собственные функции Windows.

В приложении есть оверлей, где пользователь может сделать снимок с помощью камеры cordova-pluggin. Затем сделанное снимок отображается в элементе img, затем оно копируется в элемент холста, который нужно нарисовать, и когда пользователь сохраняет фотографию (с помощью пользовательского чертежа) в ms-appdata: //local/XXX.png. Изображение правильно сохранено, и я проверил его на файловой системе, и он есть и является допустимым файлом png.

Это код, я использую, чтобы написать, используя Cordova-плагин-файл (v 4.1.1-Dev) изображение в файл:

window.resolveLocalFileSystemURL(store, function (dir) { 

       console.log("got main dir", dir); 
       //gravar imagem para ficheiro   
       dir.getFile(fileAnotacao, { create: true }, function (file) { 
        console.log("got the file", file); 

        setTimeout(function() { 

         if (apagou) { //apagou a referencia, criar nova e criar ficheiro 
          dir.getFile(fileAnotacao, { create: true }, function (file) { 
           writeLog(decodedData, file); 
          }); 
         } else 
          //grava ficheiro 
          writeLog(decodedData, file); 
        }, 1500); 

        //1º apaga ficheiro se existir 
        file.remove(function() { 
         console.log('File removed.'); 
         apagou = true; 
        }, fail); 
       }); 
      }); 

Функция WriteLog заключается в следующем:

function writeLog(str, lob) { 
    if (!lob) return; 

    lob.createWriter(function (fileWriter) { 

     fileWriter.seek(fileWriter.length); 

     fileWriter.write(str); 
     console.log("ok, in theory i worked"); 
    }, fail); 
} 

После сохранения файла на диск я обновляю пространство имен с помощью Пути двух файлов. Оригинал, названный «оригинальным» и нарисованным, названный «anotacao».

После этого я обновляю второе пространство имен с именами файлов, которые связаны с компонентом Winjs Flipview. Я использую второе пространство имен, потому что я хочу показать только изображения из подсекции исходного пространства имен, то есть из одного вопроса.

function AtualizarFotos() { 

    var id = document.getElementById("id_val_foto").innerHTML; 

    //atualizar namespaces com as fotos 
    var idq = id.split("_"); 
    //quest is used to fectch the correct question, so it knows what photos to show 
    var quest = GetPergunta(idq[1]); 
    if (quest) { 
     if (FotosNP.ftList) { 

      FotosNP.ftList.splice(0, FotosNP.ftList.length); 
      quest.Fotos.forEach(function additem(value, index, array) { 
       FotosNP.ftList.push(value); 
      }); 
    //updates a counter 
      document.getElementById("contaFotos").innerHTML = FotosNP.ftList.length; 
     } 
    } 

В HTML У меня есть шаблон и fliview, связанный с пространством имен FotosNP. Если поставить «оригинал» в поле привязки, флипвью работает правильно. Если я поместил «anotacao» в поле привязки, изображение не будет загружено, даже если я закрою и открою наложение.

Обе фотографии сохраняются в одной папке: ms-appdata: /// local /.

Я проверил HTML, используя DOM-инспектор, и атрибут src верен. Я попытался использовать консоль Javascript и отобразить нарисованную фотографию на теге изображения, и он также не отображается.

Я пробовал установить тайм-аут перед обновлением пространства имен Flipview, потому что я утверждал, что это может быть какая-то задержка при записи на диск.

Я пробовал разные компоненты, а также использовал простой элемент img, и он не показывает фотографию.

photo not shown error

Если закрыть и запустить приложение снова, и загружать сохраненные вопросы с фотографиями, фотографии отображаются правильно.

Что я делаю неправильно в файле пишут? Пожалуйста, помогите.

ответ

0

После нескольких дней работы над этим и окончательного запроса о помощи я выяснил, что это действительно задержка, вызванная функцией записи.

Я решил разместить обновления пространства имен в событии onwriteend файла.

fileWriter.onwriteend= function (evt){ 
             console.log("ok, in theory i worked"); 
             quest.Fotos.push({ id: idFoto, original: app.lastCapture, anotacao: store + fileAnotacao }); 
             AtualizarFotos(); 
           } 

Я уже пробовал устанавливать тайм-аут, но времени было недостаточно. Ширина этого я получаю некоторое отставание, но по крайней мере оно работает.

Спасибо.

 Смежные вопросы

  • Нет связанных вопросов^_^