Armit и Sniffer оба являются правильными (у меня не было времени, чтобы проверить ссылку Люсфера на сериализацию всего массива и сохранение его за один раз).У вас есть несколько вариантов здесь, в зависимости от вашей ситуации.
Как общее практическое правило при хранении значений в Android:
Когда вы хотите временно сохранить данные, когда у пользователя открыто приложение(даже если приложение перемещено в фоновый режим), но требуется, чтобы данные сбрасывались до исходных значений (0, ложь или ноль, если не определено) каждый раз, когда вы закрываете приложение:
-Используйте SavedInstanceState, который будетдаже защитить данные от изменений поворота экрана.
ИЛИ
- Создайте новый класс Java и сохраните в нем свои данные.Данные, хранящиеся в файле класса Java, будут сохранять свое значение до тех пор, пока приложение открыто (даже когда приложение перемещено в фоновый режим), где данные, хранящиеся в Activity, будут сбрасывать свои значения при изменении ориентации или даже при переходе к другому.активность, если данные явно не сохраняются и не передаются ... (НИЖЕ ПРИМЕР КУРСА SINGELTON JAVA)
public class RegularJavaClass {
public static RegularJavaClass myObj;
public RegularJavaClass(){}
public static RegularJavaClass getInstance() {
if (myObj == null) {
myObj = new RegularJavaClass();
}
return myObj;
}
private int myNumValue;
private String myStringValue;
public int getMyNumValue() {
return myNumValue;
}
public void setMyNumValue(int myNumValue) {
this.myNumValue = myNumValue;
}
public String getMyStringValue() {
return myStringValue;
}
public void setMyStringValue(String myStringValue) {
this.myStringValue = myStringValue;
}
}
ТОГДА, КОГДА ВЫ ВЫЗЫВАЕТЕ ЭТОТ КЛАСС, ЧТОБЫ ИСПОЛЬЗОВАТЬ STUFF USE
int someNum = 3000;
String someString = "saveThisString";
RegularJavaClass.getInstance().setMyNumValue(someNum);
RegularJavaClass.getInstance().setMyStringValue(someString);
ТОГДА, КОГДА ВЫ ХОТИТЕ ПОЛУЧИТЬ ЭТУ ДАННЫЕ
int retrieveNum = RegularJavaClass.getInstance().getMyNumValue();
String retrieveString = RegularJavaClass.getInstance().getMyStringValue();
Когда вы хотите сохранить небольшой объем данных и сохранить его, даже когда приложение будет закрыто и снова открыто позднее (илипока приложение не будет удалено или явно изменено разработчиком)
-Используйте sharedPreferences.Думайте об этом как о крошечной базе данных, с которой каждое приложение для Android поставляется автоматически.Не забывайте хранить здесь МАЛЕНЬКОЕ количество данных
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Thread t = new Thread(new Runnable() {
@Override
public void run() {
SharedPreferences prefs =
getSharedPreferences("StorageName", MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
//The value type determines the "put" in your case break the
//array into a for statement and save each value
for (String s : myArray) {
//s would be the value
//make a key for your stored value just like a HashMap
editor.putString(key, value).apply();
}
}
});
t.start();
}
}
ПОТОМ, ЧТОБЫ ПОЛУЧИТЬ ВАШИ ХРАНЯЕМЫЕ ЗНАЧЕНИЯ ПОЗЖЕ
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SharedPreferences prefs =
getSharedPreferences("StorageName", MODE_PRIVATE);
//Always enter a default value for just in case the storage
//value is empty
String myStoredValue = prefs.getString(key,null);
}
}
Когда вы хотите сохранить БОЛЬШОЙ объем данных и сохранить его даже тогда, когдаприложение закрывается и снова открывается позднее (или до тех пор, пока приложение не будет удалено или явно изменено разработчиком)
-Используйте базу данных, такую как SQLite