#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 выглядело как хорошая идея: (