Хранение данных. Файлы. Xamarin Forms

Содержание

Слайд 2

ЧЕТЫРЕ ТИПА ХРАНИЛИЩА ДАННЫХ

Коллекция Properties в классе Application, которая предназначена для хранения

ЧЕТЫРЕ ТИПА ХРАНИЛИЩА ДАННЫХ Коллекция Properties в классе Application, которая предназначена для
каких-то временных данных
Настройки (Preferences) операционной системы для хранения каких-то атомарных данных типа int или string
Файлы в файловой системе
Базы данных

Слайд 3

СВОЙСТВО PROPERTIES КЛАССА APPLICATION

Представляет словарь, где каждому ключу с типом string сопоставляется

СВОЙСТВО PROPERTIES КЛАССА APPLICATION Представляет словарь, где каждому ключу с типом string
некоторое значение.
Содержимое этого словаря автоматически сохраняется перед тем, как приложение завершается, поэтому при новом запуске приложения мы сможем использовать ранее сохраненные в словаре данные.

Слайд 4

СВОЙСТВО PROPERTIES КЛАССА APPLICATION

При этом мы не ограничены только классом Application, в

СВОЙСТВО PROPERTIES КЛАССА APPLICATION При этом мы не ограничены только классом Application,
котором собственно определено данное свойство. Мы также можем к нему обращаться в коде страниц с помощью выражения App.Current.Properties.
Принципы работы с Properties те же, что и со стандартными словарями

Слайд 5

ДОБАВЛЕНИЕ ДАННЫХ В СЛОВАРЬ

App.Current.Properties.Add("name", "Tom");
// или так
App.Current.Properties["name"] = "Tom";

ДОБАВЛЕНИЕ ДАННЫХ В СЛОВАРЬ App.Current.Properties.Add("name", "Tom"); // или так App.Current.Properties["name"] = "Tom";

Слайд 6

ПОЛУЧЕНИЕ ЗНАЧЕНИЯ

string name = App.Current.Properties["name"];

ПОЛУЧЕНИЕ ЗНАЧЕНИЯ string name = App.Current.Properties["name"];

Слайд 7

ПОЛУЧЕНИЕ С ПРОВЕРКОЙ НА НАЛИЧИЕ

object name = "";
if(App.Current.Properties.TryGetValue("name", out name))
{
    // выполняем действия,

ПОЛУЧЕНИЕ С ПРОВЕРКОЙ НА НАЛИЧИЕ object name = ""; if(App.Current.Properties.TryGetValue("name", out name))
если в словаре есть ключ "name"
}

Слайд 8

УДАЛЕНИЕ

App.Current.Properties.Remove("name");

УДАЛЕНИЕ App.Current.Properties.Remove("name");

Слайд 9

ПРИМЕР ПРОЕКТА СТРАНИЦЫ MAINPAGE С ТЕКСТОВЫМ ПОЛЕМ И КНОПКОЙ


ПРИМЕР ПРОЕКТА СТРАНИЦЫ MAINPAGE С ТЕКСТОВЫМ ПОЛЕМ И КНОПКОЙ xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="HelloApp.MainPage">
xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="HelloApp.MainPage">
  
    
    

Слайд 10

ДОБАВЛЕНИЕ И ИЗВЛЕЧЕНИЕ ИЗ СЛОВАРЯ PROPERTIES ВВЕДЕННОГО В ТЕКСТОВОЕ ПОЛЕ ТЕКСТА

protected override

ДОБАВЛЕНИЕ И ИЗВЛЕЧЕНИЕ ИЗ СЛОВАРЯ PROPERTIES ВВЕДЕННОГО В ТЕКСТОВОЕ ПОЛЕ ТЕКСТА protected
void OnAppearing()
        {
            object name = "";
            if (App.Current.Properties.TryGetValue("name", out name))
            {
                nameBox.Text = (string)name;
            }
            base.OnAppearing();
        }

Слайд 11

ДОБАВЛЕНИЕ И ИЗВЛЕЧЕНИЕ ИЗ СЛОВАРЯ PROPERTIES ВВЕДЕННОГО В ТЕКСТОВОЕ ПОЛЕ ТЕКСТА

 
        private void

ДОБАВЛЕНИЕ И ИЗВЛЕЧЕНИЕ ИЗ СЛОВАРЯ PROPERTIES ВВЕДЕННОГО В ТЕКСТОВОЕ ПОЛЕ ТЕКСТА private
OnClick(object sender, EventArgs e)
        {
            string value = nameBox.Text;
App.Current.Properties["name"] = value;
        }

Слайд 12

НАСТРОЙКИ ПРИЛОЖЕНИЯ

Каждая система предполагает механизм настроек пользователя, которые можно сохранять для последующего

НАСТРОЙКИ ПРИЛОЖЕНИЯ Каждая система предполагает механизм настроек пользователя, которые можно сохранять для
использования.
Например, на Android это объект Preference, в iOS это объект CFPreferences, а в Windows 10 настройки доступны через объект ApplicationData.
В Xamarin Forms для работы с настройками мы можем использовать функциональность из пакета Xamarin Essentials, который добавляется в проект Xamarin Forms по умолчанию.

Слайд 13

ВСЕ НАСТРОЙКИ ДОСТУПНЫ ЧЕРЕЗ СВОЙСТВО PREFERENCES

Методы:
void Set(key, value): сохранение значения value по ключу

ВСЕ НАСТРОЙКИ ДОСТУПНЫ ЧЕРЕЗ СВОЙСТВО PREFERENCES Методы: void Set(key, value): сохранение значения
key
string Get(key, defaultValue): получение значения по ключу key. Если же настроек с таким ключом нет, то возвращается значение по умолчанию - defaultValue

Слайд 14

ВСЕ НАСТРОЙКИ ДОСТУПНЫ ЧЕРЕЗ СВОЙСТВО PREFERENCES

Методы:
void Remove(key): удаляет настройку с ключом key
void Clear():

ВСЕ НАСТРОЙКИ ДОСТУПНЫ ЧЕРЕЗ СВОЙСТВО PREFERENCES Методы: void Remove(key): удаляет настройку с
удаляет все настройки
bool ContainsKey(key): возвращает true, если имеется настройка с ключом key

Слайд 15

ПРИМЕР СОХРАНЕНИЯ ПО КЛЮЧУ

// сохраняем значение Tom по ключу name
Preferences.Set("name", "Tom");

ПРИМЕР СОХРАНЕНИЯ ПО КЛЮЧУ // сохраняем значение Tom по ключу name Preferences.Set("name", "Tom");

Слайд 16

ПОЛУЧЕНИЕ СОХРАНЕННОГО ЗНАЧЕНИЯ ПО КЛЮЧУ

string name = Preferences.Get("name");
// если объекта нет используем

ПОЛУЧЕНИЕ СОХРАНЕННОГО ЗНАЧЕНИЯ ПО КЛЮЧУ string name = Preferences.Get("name"); // если объекта
значение по умолчанию - "не известно"
string name2 = Preferences.Get("name", "не известно");

Слайд 17

УДАЛЕНИЕ

Preferences.Remove("name");

УДАЛЕНИЕ Preferences.Remove("name");

Слайд 18

ПРИМЕР

Определим на странице текстовое поле для ввода, кнопку для сохранения введенного значения

ПРИМЕР Определим на странице текстовое поле для ввода, кнопку для сохранения введенного
в настройках и метку для вывода из настроек

Слайд 19

КОД XAML


             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="HelloApp.MainPage">
  
    

КОД XAML xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="HelloApp.MainPage">
/>
  

Слайд 20

ПОЛУЧЕНИЕ И СОХРАНЕНИЕ ДАННЫХ В НАСТРОЙКАХ

 protected override void OnAppearing()
        {
            string name =

ПОЛУЧЕНИЕ И СОХРАНЕНИЕ ДАННЫХ В НАСТРОЙКАХ protected override void OnAppearing() { string
Preferences.Get("name", "не установлено");
            nameLabel.Text = name;
            base.OnAppearing();
        }

Слайд 21

ПОЛУЧЕНИЕ И СОХРАНЕНИЕ ДАННЫХ В НАСТРОЙКАХ

  
        private void OnClick(object sender, EventArgs e)
        {
            string

ПОЛУЧЕНИЕ И СОХРАНЕНИЕ ДАННЫХ В НАСТРОЙКАХ private void OnClick(object sender, EventArgs e)
value = nameBox.Text;
            nameLabel.Text = value;
            Preferences.Set("name", value);
        }

Слайд 22

РАБОТА С ФАЙЛАМИ

Каждая мобильная платформа имеет свою специфику, свою файловую систему, свою

РАБОТА С ФАЙЛАМИ Каждая мобильная платформа имеет свою специфику, свою файловую систему,
структуру каталогов.
Работа с файлами и каталогами в Xamarin Forms производится также, как и в целом .NET - с помощью классов из пространства имен System.IO

Слайд 23

ПРИМЕР ПРОЕКТА ДЛЯ РАБОТЫ С ФАЙЛАМИ


             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="HelloApp.MainPage">
  
    
      
      

ПРИМЕР ПРОЕКТА ДЛЯ РАБОТЫ С ФАЙЛАМИ xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="HelloApp.MainPage">
Height="*" />
      
    
    
      
      

Слайд 24

ПРИМЕР ПРОЕКТА ДЛЯ РАБОТЫ С ФАЙЛАМИ (ПРОДОЛЖЕНИЕ)

  
    

ПРИМЕР ПРОЕКТА ДЛЯ РАБОТЫ С ФАЙЛАМИ (ПРОДОЛЖЕНИЕ)
ItemSelected="FileSelect">
      
        
          
            
              
            

          

        

      

    
  

Слайд 25

ОБРАБОТЧИКИ СОБЫТИЙ

public partial class MainPage : ContentPage
    {
        string folderPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
        public MainPage()
        {
            InitializeComponent();
        }

ОБРАБОТЧИКИ СОБЫТИЙ public partial class MainPage : ContentPage { string folderPath =

Слайд 26

ОБРАБОТЧИКИ СОБЫТИЙ

 protected override void OnAppearing()
        {
            base.OnAppearing();
            UpdateFileList();
        }

ОБРАБОТЧИКИ СОБЫТИЙ protected override void OnAppearing() { base.OnAppearing(); UpdateFileList(); }

Слайд 27

ОБРАБОТЧИКИ СОБЫТИЙ

// сохранение текста в файл
        async void Save(object sender, EventArgs args)
        {
            string filename

ОБРАБОТЧИКИ СОБЫТИЙ // сохранение текста в файл async void Save(object sender, EventArgs
= fileNameEntry.Text;
            if (String.IsNullOrEmpty(filename)) return;
            // если файл существует
            if (File.Exists(Path.Combine(folderPath, filename)))
            {
                // запрашиваем разрешение на перезапись
                bool isRewrited = await DisplayAlert("Подтверждение", "Файл уже существует, перезаписать его?", "Да", "Нет");
                if (isRewrited == false) return;
            }
            // перезаписываем файл
            File.WriteAllText(Path.Combine(folderPath, filename), textEditor.Text);
            // обновляем список файлов
            UpdateFileList();
        }

Слайд 28

ОБРАБОТЧИКИ СОБЫТИЙ

 void FileSelect(object sender, SelectedItemChangedEventArgs args)
        {
            if (args.SelectedItem == null) return;
            // получаем выделенный

ОБРАБОТЧИКИ СОБЫТИЙ void FileSelect(object sender, SelectedItemChangedEventArgs args) { if (args.SelectedItem == null)
элемент
            string filename = (string)args.SelectedItem;
            // загружем текст в текстовое поле
            textEditor.Text = File.ReadAllText(Path.Combine(folderPath, (string)args.SelectedItem));
            // устанавливаем название файла
            fileNameEntry.Text = filename;
            // снимаем выделение
            filesList.SelectedItem = null;
}

Слайд 29

ОБРАБОТЧИКИ СОБЫТИЙ

void Delete(object sender, EventArgs args)
        {
            // получаем имя файла
            string filename = (string)((MenuItem)sender).BindingContext;
            //

ОБРАБОТЧИКИ СОБЫТИЙ void Delete(object sender, EventArgs args) { // получаем имя файла
удаляем файл из списка
            File.Delete(Path.Combine(folderPath, filename));
            // обновляем список файлов
            UpdateFileList();
        }

Слайд 30

ОБРАБОТЧИКИ СОБЫТИЙ

// обновление списка файлов
        void UpdateFileList()
        {
            // получаем все файлы
            filesList.ItemsSource = Directory.GetFiles(folderPath).Select(f =>

ОБРАБОТЧИКИ СОБЫТИЙ // обновление списка файлов void UpdateFileList() { // получаем все
Path.GetFileName(f));
            // снимаем выделение
            filesList.SelectedItem = null;
        }

Слайд 31

ПОЯСНЕНИЯ

константой Environment.SpecialFolder.LocalApplicationData
локальную папку приложения для хранения данных
string folderPath - глобальную переменную, которая

ПОЯСНЕНИЯ константой Environment.SpecialFolder.LocalApplicationData локальную папку приложения для хранения данных string folderPath -
хранит путь к этой папке

Слайд 32

ПОЯСНЕНИЯ

При загрузке срабатывает метод UpdateFileList(), который загружает названия всех файлов из папки в

ПОЯСНЕНИЯ При загрузке срабатывает метод UpdateFileList(), который загружает названия всех файлов из папки в список ListView:
список ListView:

Слайд 33

ПОЯСНЕНИЯ

С помощью метода Directory.GetFiles() возвращаем список всех файлов.
Однако каждое название файла будет содержать

ПОЯСНЕНИЯ С помощью метода Directory.GetFiles() возвращаем список всех файлов. Однако каждое название
полный путь с учетом всех внешних каталогов.
И чтобы получить только непосредственно название файла, применяется метод Path.GetFileName, который из полного пути файла получет только его название.

Слайд 34

ПОЯСНЕНИЯ

Метод Save - обработчик нажатия кнопки будет проверять наличие файла.
Если файл

ПОЯСНЕНИЯ Метод Save - обработчик нажатия кнопки будет проверять наличие файла. Если
существует, то отображается диалоговое окно с требованием подтвердить действие.
Если файл не существует, то он создается, и в него заносится текст из текстового поля Editor.

Слайд 35

ПОЯСНЕНИЯ

Стоит учитывать, что чтобы сохранить файл именно в той папке, с который

ПОЯСНЕНИЯ Стоит учитывать, что чтобы сохранить файл именно в той папке, с
мы работаем, необходимо использовать конкатенацию пути к папке и имени файла:
Path.Combine(folderPath, filename)

Слайд 36

ПОЯСНЕНИЯ

сохранение производится с помощью метода File.WriteAllText:
File.WriteAllText(Path.Combine(folderPath, filename), textEditor.Text);

ПОЯСНЕНИЯ сохранение производится с помощью метода File.WriteAllText: File.WriteAllText(Path.Combine(folderPath, filename), textEditor.Text);

Слайд 37

ПОЯСНЕНИЯ

Метод FileSelect() представляет обработчик выделения элемента в списке ListView. По выделению происходит загрузка текста

ПОЯСНЕНИЯ Метод FileSelect() представляет обработчик выделения элемента в списке ListView. По выделению
в текстовое поле Editor.
Для считывания текста файла применяется метод File.ReadAllText():
textEditor.Text = File.ReadAllText(Path.Combine(folderPath, (string)args.SelectedItem));

Слайд 38

ПОЯСНЕНИЯ

метод Delete() является обработчиком нажатия на меню. То есть при сильном нажатии на элемент

ПОЯСНЕНИЯ метод Delete() является обработчиком нажатия на меню. То есть при сильном
в списке ListView отображается данное контекстное меню из одного пункта, нажатие на которое приводит к удалению выделенного файла.
File.Delete(Path.Combine(folderPath, filename));

Слайд 39

ПОЯСНЕНИЯ

ПОЯСНЕНИЯ

Слайд 40

ЗАМЕЧАНИЯ

1. Возможны проблемы доступа к файлам, нужны права root
2. Библиотеки меняются, нужно

ЗАМЕЧАНИЯ 1. Возможны проблемы доступа к файлам, нужны права root 2. Библиотеки
быть внимательным, читать руководство
Android.Environment
System.Environment
Имя файла: Хранение-данных.-Файлы.-Xamarin-Forms.pptx
Количество просмотров: 53
Количество скачиваний: 0