LoliDeveloper
@LoliDeveloper
Линейная алгебра как смысл жизни

Как в андроид-приложении на Xamarin сохранять сериализованые объекты на устройстве пользователя в формате JSON?

Пытаюсь делать это простыми методами, но пишет "Access to the path /data.json is denied".
Как можно обойти защиту?
Делал обычной записью
File.WriteAllText("data.json", serializeString);
  • Вопрос задан
  • 280 просмотров
Решения вопроса 2
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
1 добавить в манифест разрешение
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />


https://docs.microsoft.com/ru-ru/xamarin/android/p...

Получение пути в общем коде
public static string DbPath => DependencyService.Get<ISqLite>().GetDatabasePath("user.db");


Реализация для андроида, для других платформ немного по другому
#region License
// Разработано: Коротенко Владимиром Николаевичем (Vladimir N. Korotenko)
// email: koroten@ya.ru
// skype:vladimir-korotenko 
// https://vkorotenko.ru
// Создано:  09.04.2019 22:38
#endregion
using System;
using System.IO;
using SpecialForcesDirectory.Code;
using SpecialForcesDirectory.Droid;
using Xamarin.Forms;

[assembly: Dependency(typeof(SQLite_Android))]
namespace SpecialForcesDirectory.Droid
{
    public class SQLite_Android : ISqLite
    {
        public SQLite_Android() { }
        public string GetDatabasePath(string sqliteFilename)
        {
            string documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
            var path = Path.Combine(documentsPath, sqliteFilename);
            return path;
        }
    }
}
Ответ написан
Комментировать
LoliDeveloper
@LoliDeveloper Автор вопроса
Линейная алгебра как смысл жизни
Почитал доки ещё. Советуют делать такие операции асинхронно.
*В моём случае для записи использовал using*
string jsonString;
var backingFile = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "data.json");
using (var writer = File.CreateText(backingFile))
{
          await writer.WriteLineAsync(serializeString); //асинхронно 
}
using (var reader = File.ReadAllTextAsync(backingFile))
{
          jsonString = await reader;
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы