Arhn - архитектура программирования

Список сохранения xamarin.android‹MyClass› в OnSaveInstaneState

Я пытаюсь сделать «ToDoListApp», и моя проблема в том, что когда я добавляю некоторые задачи, а затем закрываю приложение, все удаляется, и приложение запускается заново.

Я видел некоторые другие подобные вопросы, и кажется, что решение OnSaveInstanceState(Bundle outState), но у меня есть общий список с классом, который я сделал List<MyClass>. Моя проблема в том, что когда я пишу outstate.Put…, для моего массива нет вариантов, я могу выбирать только между целым числом, строкой, последовательностью символов и разделяемым. Итак, мой вопрос: как я могу сохранить состояние своего приложения?

25.10.2018

Ответы:


1

То, что вы пытаетесь сделать здесь, - это то, что вы должны делать с использованием мобильной базы данных SQLite. Это можно сделать так:

  • Загрузите пакет NuGet sqlite-net-pcl от Фрэнка А. Крюгера.

  • Используя SQLite, создайте объект подключения SQLite

    var db = new SQLiteConnection (dbPath);
    
  • После того, как вы установили соединение, создайте свою таблицу примерно так:

     db.CreateTable<MyClass>();
    
  • Затем вставьте данные, которые вы хотите вставить в таблицу, примерно так:

     db.Insert(_yourClassObject);
    
  • Получить данные примерно так;

     var stock = db.Get<MyClass>(**yourPrimaryId**); //single object based on condition
     var stockList = db.Table<MyClass>(); //The list of all data in this table.
    

Чтобы лучше понять, как это работает, сослаться на это

Обновить

Если вы хотите сделать это, используя общие настройки, способ сделать это — преобразовать его в JSON, а затем сохранить в настройках в виде строки примерно так:

  • Использование пакета Newtonsoft JSON:

    List<MyClass> your_Object;
    your_Object=FooValueAssigned;// Assumed assignment
    string yourString=JsonConvert.SerializeObject(your_Object); //It accepts any object in your case give your list here
    
  • Теперь сохраните его в общих настройках следующим образом:

    ISharedPreferences prefs = PreferenceManager.GetDefaultSharedPreferences (mContext);
    ISharedPreferencesEditor editor = prefs.Edit ();
    editor.PutString("your_list", yourString);
    // editor.Commit();    // applies changes synchronously on older APIs
    editor.Apply();        // applies changes asynchronously on newer APIs
    
  • Получите из общих настроек что-то вроде этого:

    ISharedPreferences prefs = PreferenceManager.GetDefaultSharedPreferences (mContext);
    string mString = prefs.GetString ("your_list", <default value>);
    
  • Преобразуйте его обратно в тип вашего объекта примерно так:

    var yourObjectFromPref= JsonConvert.DeserializeObject<List<MyClass>>(mString);
    
25.10.2018
  • Есть ли возможность сделать это с помощью sharedPreferences? 25.10.2018
  • @GeorgiYakov, вы можете сохранять только примитивные значения в SharedPreferences. Если вы действительно не хотите использовать sqlite, вы можете попробовать это, хотя это и на Java здесь 25.10.2018
  • @GeorgiYakov Обновляю ответ, посмотри 26.10.2018
  • @G.hakim Привет, что именно делает your_Object=FooValueAssigned;? 29.10.2018
  • Ну ничего, что является просто предполагаемым назначением в вашем случае, вы назначите свое значение, просто сделали это, чтобы вы не оставили его нулевым и не получили исключение нулевого указателя 29.10.2018
  • Конечно, нет проблем 29.10.2018
  • @G.hakim Ааа, забыл тебе сказать. JsonConvert.DeserializeObject<MyClass>(mString); должно быть JsonConvert.DeserializeObject<List<MyClass>>(mString);. Не могли бы вы отредактировать его так, чтобы ответ был действительно правильным. 29.10.2018
  • Да не вопрос 30.10.2018
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..