Сохранение нового элемента в RecyclerView

У меня есть код который позволяет добавлять новый элемент в RecyclerView. Проблема в том, что после перезапуска приложения элемент не сохраняется и просто пропадает. Как это решить?

package ru.mdev.moneybox;

import android.app.Dialog;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {
    private ImageView menu;
    private EditText search;
    private RecyclerView recview;
    private Button create;
    public ArrayList<Box> boxes;
    private BoxAdapter adapter;
    private Dialog dialog;
    private TextView check;
    private static final String BOXES_KEY = "boxes_key";
    private static final String PREFS_NAME = "ru.mdev.moneybox";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        menu = findViewById(R.id.menu);
        search = findViewById(R.id.search);
        recview = findViewById(R.id.recview);
        create = findViewById(R.id.create);
        check = findViewById(R.id.check);
        dialog = new Dialog(MainActivity.this);

        recview.setLayoutManager(new LinearLayoutManager(this));

        boxes = new ArrayList<>();
        adapter = new BoxAdapter(boxes, MainActivity.this);
        recview.setAdapter(adapter);

        create.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dialog.setContentView(R.layout.activity_create);
                dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
                dialog.setCanceledOnTouchOutside(true);
                dialog.show();

                EditText name = dialog.findViewById(R.id.name);
                EditText target = dialog.findViewById(R.id.target);
                EditText starter = dialog.findViewById(R.id.starter);
                Button ssave = dialog.findViewById(R.id.save);
                ssave.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if (name.getText().toString().isEmpty() || target.getText().toString().isEmpty() || starter.getText().toString().isEmpty()) {
                            Toast.makeText(MainActivity.this, "Поля не могут быть пустыми", Toast.LENGTH_SHORT).show();
                        } else if (name.getText().length() > 20) {
                            Toast.makeText(MainActivity.this, "Название не может быть более 20 символов", Toast.LENGTH_SHORT).show();
                        } else {
                            boxes.add(new Box(name.getText().toString(), Integer.valueOf(target.getText().toString()), Integer.valueOf(starter.getText().toString())));
                            dialog.dismiss();
                            adapter.notifyDataSetChanged();
                        }
                    }
                });
            }
        });
    }
}

Ответы (1 шт):

Автор решения: mercidev

В итоге пришел к решению сам, использовал хранение данных в json.

Прилагаю код, вдруг кому пригодится:

public void saveData(ArrayList<Box> boxes) {
        String jsonString = gson.toJson(boxes);
        File file = new File(context.getFilesDir(), FILE_NAME);
        try (FileWriter writer = new FileWriter(file)) {
            writer.write(jsonString);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

public ArrayList<Box> loadData() {
        File file = new File(context.getFilesDir(), FILE_NAME);
        if (!file.exists()) {
            return new ArrayList<>();
        }

        try (FileReader reader = new FileReader(file)) {
            Type listType = new TypeToken<ArrayList<Box>>() {}.getType();
            return gson.fromJson(reader, listType);
        } catch (IOException e) {
            e.printStackTrace();
            return new ArrayList<>();
        }
    }
→ Ссылка