Приложение Nativescript angular для Android не может прочитать файл из частной папки приложения после копирования файла

#android #json #angular #nativescript

#Android #json #angular #nativescript

Вопрос:

У меня есть простое приложение в native script angular для Android, где я сохраняю некоторые пользовательские данные в файле JSON в личной папке приложения. Это действительно работает, но проблема в том, что если я скопирую файл на SD-карту, а затем обратно в папку приложения, приложение не сможет прочитать содержимое файла. Конечно, я изменил права доступа к файлу на 600 (это то, что было у исходного файла). Но это все равно не работает. Если вы спросите, почему я копирую файл на SD-карту и обратно, это потому, что я пытаюсь решить проблему, из-за которой, если я обновляю приложение в Play Store, оно не может прочитать сохраненный файл JSON, созданный предыдущей версией, и я думаю, что это как-то связано. Код для сохранения данных в файл таков:

 saveUsers() {
        this.adresarAppky = fs.knownFolders.currentApp();
        this.adresarZrodenci = this.adresarAppky.getFolder('zrodenci');
        this.zrodenciFile = this.adresarZrodenci.getFile('zrodenci.json');
        this.zrodenciFile.writeText(JSON.stringify(this.users))
            .then(result => {
                console.log('File saved');
            }).catch(err => {
                console.log('Error saving '   err);
            })
    }
 

и это код для чтения содержимого файла

 loadSavedUsers() {
        this.adresarAppky = fs.knownFolders.currentApp();
        this.adresarZrodenci = this.adresarAppky.getFolder('zrodenci');
        if (!File.exists(path.join(this.adresarZrodenci.path, 'zrodenci.json'))) this.saveUsers();
        this.zrodenciFile = this.adresarZrodenci.getFile('zrodenci.json');
        this.zrodenciFile.readText()
            .then(res => {
                this.zrodenciData = JSON.parse(res);
                console.log('Data read '   res);
                this.users = this.zrodenciData;
                this.emitSelectedUser();
            }).catch(err => {
                console.log('Error reading file '   err);
            });

    }
 

Строка с console.log(‘Ошибка чтения файла’) выдает эту ошибку — ReadTextTask не возвращает результата.

Комментарии:

1. Зарегистрируйте свою ошибку console.log('error reading file', err) таким образом, вы увидите всю информацию об ошибке (а не только строковое представление). И покажите нам полный журнал консоли File saved до ошибки. Также посмотрите на logcat, когда это произойдет. Там может отображаться некоторая связанная информация

2. Покопавшись в источнике nativescript, я нашел соответствующую часть кода. Вы должны увидеть какой-то журнал ошибок в logcat с тегом Async . Соответствующий класс: github.com/NativeScript/NativeScript/blob/master/packages /… ; это также может помочь в отладке вашей первоначальной проблемы

3. Спасибо за предложения, изменение console.log('error reading file', err) , к сожалению, привело к тому же результату, что и раньше, предложение logcat дало такой результат: 11-26 20:03:05.989 25366 25438 E Async: не удалось прочитать файл, исключение FileNotFoundException: /data/data/sk.ndrjvvr.mojhoroskop/files/app/zrodenci/zrodenci.json(Отказано в разрешении), чего я не понимаю, потому что файл имеет те же разрешения, что и исходный файл, а также того же владельца. В чем может быть проблема?

4. Зачем хранить файлы json на диске, когда есть решения для сохранения данных в nativescript nativescript.org/blog /…

5. Поскольку это довольно большой json (30-40 КБ), поэтому SharedPrefs, вероятно, не подходит, а решение для базы данных кажется излишним. И простое сохранение файла json выглядело как хорошая идея: (