Суть вопроса заключается в сериализации и сохранении объектов, а затем их десериализации. Есть много способов сделать это, и более надежные и сложные решения часто включают в себя базу данных, как правило, SQLite на Android, а также некоторую инфраструктуру объектно-ориентированного сопоставления.
Тем не менее, такое надежное решение может быть излишним в этом случае, так как вариант использования предназначен для сериализации и сохранения очень небольшого списка объектов, каждый из которых имеет ограниченное количество полей. Наиболее распространенный способ сохранения небольших фрагментов данных на Android - это общие настройки. Вы можете получить ссылку на объект, который управляет этим с:
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
После того как вы это, вы сохраните Струны для постоянного хранения с кодом:
SharedPreferences.Editor editor = preferences.edit();
editor.putString("savedBeacons", savedBeaconsAsString);
editor.apply();
Затем загрузите их обратно, как это:
String savedBeaconsAsString = preferences.getString("savedBeacons", null);
Конечно, вышеизложенное сохраняет только одну строку в постоянное хранилище. Как преобразовать список объектов в String и как преобразовать String в список объектов. Это называется сериализацией.
Существует множество способов сделать это, включая преобразование в JSON и обратно. Один из простейших методов - использование Java Serialization API. Основным недостатком этого является то, что они могут не выполнить десериализацию (загрузить обратно) ваш объект, если позже вы измените определение объекта в Java-коде после сохранения записей.
Ниже приведен пример преобразования массива сохраненных биков в строку и из строки, взятой из this related answer. Обратите внимание, что приведенный ниже код предполагает, что savedBeacons - это массив, а не ArrayList
, как показывает ваш код. Я показал это как массив для простоты, потому что ArrayList
не сериализуем.
// serialize
ByteArrayOutputStream out = new ByteArrayOutputStream();
new ObjectOutputStream(out).writeObject(savedBeacons);
String savedBeaconsAsString = new String(Hex.encodeHex(out.toByteArray()));
// deserialize
ByteArrayInputStream in = new ByteArrayInputStream(Hex.decodeHex(savedBeaconsAsString.toCharArray()));
savedBeacons = (BeaconDevice[]) new ObjectInputStream(in).readObject()));
* Что такое лучший метод? * Дело мнения –
Что вы думаете Piodo? –
Вам нужно сохранить весь объект, или вы можете сохранить адреса Bluetooth в виде списка строк? –