Как сохранить arraylist в sqlite android?

Пользователь

от greyson , в категории: Другие , год назад

Как сохранить arraylist в sqlite android?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от hermina.hauck , год назад

@greyson 

Чтобы сохранить ArrayList в базу данных SQLite в Android, вам потребуется выполнить следующие шаги:

  1. Создайте класс-помощник для работы с базой данных, который будет наследовать от класса SQLiteOpenHelper. В этом классе вы должны определить таблицу и столбцы, где будет храниться ваш ArrayList.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class DatabaseHelper extends SQLiteOpenHelper {
    private static final String DATABASE_NAME = "mydatabase.db";
    private static final int DATABASE_VERSION = 1;
    private static final String TABLE_NAME = "mytable";
    private static final String COLUMN_NAME = "mycolumn";

    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String createTable = "CREATE TABLE " + TABLE_NAME + " ("
                + COLUMN_NAME + " TEXT)";
        db.execSQL(createTable);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        String dropTable = "DROP TABLE IF EXISTS " + TABLE_NAME;
        db.execSQL(dropTable);
        onCreate(db);
    }
}


  1. В вашей активности или фрагменте создайте экземпляр класса DatabaseHelper и получите доступ к базе данных, вызвав метод getWritableDatabase().
1
2
DatabaseHelper dbHelper = new DatabaseHelper(this);
SQLiteDatabase database = dbHelper.getWritableDatabase();


  1. Преобразуйте ваш ArrayList в строку, например, с использованием JSON. Вызовите метод JSONArray.toJSONArray() для преобразования ArrayList в JSONArray, а затем вызовите метод toString() для преобразования JSONArray в строку.
1
2
3
4
5
ArrayList<String> myList = new ArrayList<>();
// Добавьте элементы в myList

JSONArray jsonArray = new JSONArray(myList);
String jsonString = jsonArray.toString();


  1. Вставьте полученную строку в базу данных с помощью метода insert().
1
2
3
ContentValues values = new ContentValues();
values.put(COLUMN_NAME, jsonString);
long row = database.insert(TABLE_NAME, null, values);


Теперь ваш ArrayList сохранен в базе данных SQLite. Если вам нужно получить ArrayList из базы данных, выполните следующие шаги:

  1. Получите доступ к базе данных, вызвав метод getReadableDatabase() из вашего экземпляра класса DatabaseHelper.
1
SQLiteDatabase database = dbHelper.getReadableDatabase();


  1. Выполните запрос к базе данных, используя метод query(). Вам нужно передать имя таблицы, список столбцов для выборки (в нашем случае это только один столбец) и другие параметры, если они есть.
1
Cursor cursor = database.query(TABLE_NAME, new String[] { COLUMN_NAME }, null, null, null, null, null);


  1. Извлеките строку из полученных данных.
1
2
3
4
5
6
String jsonString = "";

if (cursor != null && cursor.moveToFirst()) {
    jsonString = cursor.getString(cursor.getColumnIndex(COLUMN_NAME));
    cursor.close();
}


  1. Преобразуйте строку обратно в ArrayList, используя метод JSONArray. Если ваш ArrayList содержал объекты определенного класса, вы должны будете выполнять также десериализацию объектов из JSONArray.
1
2
3
4
5
6
7
8
9
ArrayList<String> myList = new ArrayList<>();
try {
    JSONArray jsonArray = new JSONArray(jsonString);
    for (int i = 0; i < jsonArray.length(); i++) {
        myList.add(jsonArray.getString(i));
    }
} catch (JSONException e){
    e.printStackTrace();
}


Теперь ваш ArrayList восстановлен из базы данных SQLite.

Пользователь

от kurt , 6 месяцев назад

@greyson 

Важно отметить, что в примере выше массив строк (ArrayList<String>) был использован для наглядности. Если вам нужно сохранить ArrayList объектов определенного класса в базу данных SQLite, вам потребуется сериализовать и десериализовать объекты.


Для сериализации объектов вы можете использовать Gson или ObjectOutputStream, а для десериализации - Gson, ObjectInputStream и т.д.


Вот пример кода, как можно сериализовать и десериализовать объекты с использованием Gson:

1
2
3
4
5
6
7
// Сериализация объектов в строку JSON
Gson gson = new Gson();
String jsonString = gson.toJson(myObjectArrayList);

// Десериализация объектов из строки JSON
Type type = new TypeToken<ArrayList<MyObject>>() {}.getType();
ArrayList<MyObject> myObjectArrayList = gson.fromJson(jsonString, type);


Здесь MyObject - класс ваших объектов, которые вы хотите сохранить в базе данных. Убедитесь, что MyObject имеет конструктор по умолчанию и геттеры/сеттеры для всех полей.


Теперь вы можете сохранить и получить ваш ArrayList объектов из базы данных SQLite, используя методы сериализации и десериализации.