Проблема в сохранении и загрузке двух АррайЛистов из двух разных классов одновреминно при помощи SharedPreferences и Gson
Проблема в сохранении и загрузке данных из 4х АррайЛистов. Есть 4 ArrayLists: «swedish1voc» и «english1voc» (в классе «Level1») и «swedishPractice» и «englishPractice» (в классе «Practice»).
В классе Level1.class (где происходит действие) есть такой код:
'''
private static String[] arrSwedish;
private static String[] arrEnglish;
ArrayList<String> swedish1voc;
ArrayList<String> english1voc;
'''
В том же классе в onCreate присвоены значения:
arrSwedish = getResources().getStringArray(R.array.swedish1array);
arrEnglish = getResources().getStringArray(R.array.english1array);
loadData()
//swedish1voc = new ArrayList<>(Arrays.asList(arrSwedish));
//english1voc = new ArrayList<>(Arrays.asList(arrEnglish));
Затем у меня есть метод onSwipe, который изменяет содержимое всех 4 списков:
public void onSwipeLeft() {
card.startAnimation(a1);
Practice.swedishPractice.add(swedish1voc.get(numCard));
Practice.englishPractice.add(english1voc.get(numCard));
swedish1voc.remove(numCard);
english1voc.remove(numCard);
saveData();
}
Вы видите АррайЛисты swedishPractice и englishPractice - они находятся в другом классе, называемом «Practice.class».
Затем я помещаю код sharedPreferences (я помещаю его в класс «Level1», я не знаю, правильно ли это):
private void saveData() {
SharedPreferences sharedPreferences = getSharedPreferences("shared preferences", MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
Gson gson = new Gson();
String jsonSwp = gson.toJson(Practice.swedishPractice);
String jsonEnp = gson.toJson(Practice.englishPractice);
String jsonSw1 = gson.toJson(swedish1voc);
String jsonEn2 = gson.toJson(english1voc);
editor.putString("swp list", jsonSwp);
editor.putString("enp list", jsonEnp);
editor.putString("sw1 list", jsonSw1);
editor.putString("en2 list", jsonEn2);
editor.apply();
}
private void loadData() {
SharedPreferences sharedPreferences = getSharedPreferences("shared preferences", MODE_PRIVATE);
Gson gson = new Gson();
String jsonSwp = sharedPreferences.getString("swp list", null);
String jsonEnp = sharedPreferences.getString("enp list", null);
String jsonSw1 = sharedPreferences.getString("sw1 list", null);
String jsonEn1 = sharedPreferences.getString("en1list", null);
Type type = new TypeToken<ArrayList<String>>() {}.getType();
Practice.swedishPractice = gson.fromJson(jsonSwp, type);
Practice.englishPractice = gson.fromJson(jsonEnp, type);
swedish1voc = gson.fromJson(jsonSw1, type);
english1voc = gson.fromJson(jsonEn1, type);
if(Practice.swedishPractice == null){
Practice.swedishPractice = new ArrayList<>();
Practice.englishPractice = new ArrayList<>();
swedish1voc = new ArrayList<>(Arrays.asList(arrSwedish));
english1voc = new ArrayList<>(Arrays.asList(arrEnglish));
}
}
Вопрос в следующем: когда я свайпаю пальцем влево по значениям в Level1.class, я открываю Practice.class и вижу их там. Но когда я возвращаюсь к уровню Level1.class, приложение вылетает с таким текстом в logcat:
java.lang.RuntimeException: Unable to start activity ComponentInfo{space.rodionov.smartswedish/space.rodionov.smartswedish.Level1}: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.util.ArrayList.size()' on a null object reference
А потом, если я перезапущу приложение и снова попытаюсь открыть уже активити "Practice", оно тоже вылетает, с таким текстом в logcat:
java.lang.RuntimeException: Unable to start activity ComponentInfo{space.rodionov.smartswedish/space.rodionov.smartswedish.Practice}: java.lang.IllegalArgumentException: bound must be positive
Где я не прав? В чем ошибка? Спасибо