Читаю данные из json с помощью Gson. И в одном активити я хочу изменить значения ключа одного обьекта. С помощью сеттера поставляю то значение которое мне нужно и в другом активити она показывается в recyclerview превосходно. Но после перезагрузки приложения все эти данные которые я поставил исчезают. Вопрос: как сохранить все мои изменения в этом локальном json файле?
private Category loadJSONFromDirectory() {
Gson gson=new Gson();
BufferedReader bf= null;
Category category=null;
try {
bf= new BufferedReader(new FileReader(json));
category=gson.fromJson(bf,Category.class);
} catch (FileNotFoundException e) {
e.printStackTrace();
}finally {
if(bf!=null)
try {
bf.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return category;
}
private void setFavoriteJson(boolean action) {
Category file = loadJSONFromDirectory();
for (Catsub catsub : file.getCatsub()) {
for (Subcategory subcat : catsub.getSubcategories()) {
if (subcat.getDataAll() != null) {
for (DataAll data : subcat.getDataAll()) {
if (data.getId().equals(companyId)) {
data.setFavorites(action);
}
}
}
}
}
}
Если я правильно понимаю Ваше описание и Ваш код, то Вы десериализуете json (это просто текстовые данные) в объект Category
(это уже Java-объект в куче) и далее работаете именно с Java-объектом, а не с прочитанными Вами текстовыми данными.
Для того, чтобы сохранить изменения, Вам нужно после внесённых изменений сериализовать объект обратно в json и сохранить в файл.
private void saveJsonToFile(String filePath, Category data) {
File file = new File(filePath);
Gson gson = new Gson();
FileWriter writer = null;
try {
writer = new FileWriter(file, false);
gson.toJson(data, writer);
} catch (IOException e) {
e.printStackTrace();
}
finally {
if(writer != null) {
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Кстати, Вы можете создать один объект Gson
и использовать его везде, где это необходимо, а не создавать его каждый раз для каждой операции. Вот здесь говорят, что это даже полезно.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Я пишу REST клиент, для парсинга JSON'a, я использую для этого Retrofit 2
Есть раскрывающееся по наведению курсора меню, работа которого протестированаЕсть список
Не получается удалить старые файлы в папке через JSP по датеИмеется класс для удаления файлов (DeleteFile