likes
comments
collection
share

【Android】 数据存储:全面指南

作者站长头像
站长
· 阅读数 21

前言

数据存储是 Android 应用开发的一个关键方面。无论你需要存储用户偏好设置、缓存数据还是持久保存结构化信息,了解 Android 中的各种数据存储选项至关重要。在本文中,我们将逐步深入探讨 Android 中的不同数据存储技术,从基础知识开始逐步深入更高级的选项。

SharedPreferences

SharedPreferences 是一种轻量级且简单的存储键值对的方式。通常用于存储用户偏好设置或小量数据。使用 SharedPreferences,按照以下步骤进行操作:

  1. 初始化:使用 getSharedPreferences() 方法获取 SharedPreferences 对象的引用。你可以从应用程序上下文或活动上下文中获取 SharedPreferences 对象。
javaCopy code
SharedPreferences sharedPreferences = getSharedPreferences("my_preferences", Context.MODE_PRIVATE);
  1. 写入数据:使用 edit() 方法获取 SharedPreferences.Editor 的实例,然后使用不同的 putX() 方法存储所需的数据类型。
javaCopy code
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("username", "John");
editor.putInt("age", 25);
editor.apply();
  1. 读取数据:使用相应的 getX() 方法检索数据,指定键并在键不存在时提供默认值。
javaCopy code
String username = sharedPreferences.getString("username", "默认值");
int age = sharedPreferences.getInt("age", 0);

SQLite 数据库

对于结构化数据存储,Android 提供了强大的关系型数据库管理系统 SQLite。它提供了使用 SQL 查询来管理数据的高效方式。以下是在 Android 中使用 SQLite 的方法:

  1. 创建数据库:扩展 SQLiteOpenHelper 类以创建自定义的数据库辅助类。重写 onCreate() 方法来定义数据库模式并执行必要的 SQL 语句。
javaCopy code
public class MyDatabaseHelper extends SQLiteOpenHelper {
    private static final String DATABASE_NAME = "my_database.db";
    private static final int DATABASE_VERSION = 1;

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

    @Override
    public void onCreate(SQLiteDatabase db) {
        String createTableQuery = "CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)";
        db.execSQL(createTableQuery);
    }

    // ...
}
  1. 执行数据库操作:使用 SQLiteDatabase 类在数据库上执行 CRUD(创建、读取、更新、删除)操作。
MyDatabaseHelper dbHelper = new MyDatabaseHelper(context);
SQLiteDatabase db = dbHelper.getWritableDatabase();

// 插入记录
ContentValues values = new ContentValues();
values.put("name", "John Doe");
long insertedId = db.insert("users", null, values);

// 查询记录
Cursor cursor = db.query("users", null, null, null, null, null, null);
while (cursor.moveToNext()) {
    int id = cursor.getInt(cursor.getColumnIndex("id"));
    String name = cursor.getString(cursor.getColumnIndex("name"));
    // 处理检索到的数据
}

// 更新记录
ContentValues updatedValues = new ContentValues();
updatedValues.put("name", "Jane Doe");
db.update("users", updated// 更新记录
ContentValues updatedValues = new ContentValues();
updatedValues.put("name", "Jane Doe");
db.update("users", updatedValues, "id=?", new String[] { String.valueOf(userId) });

// 删除记录
db.delete("users", "id=?", new String[] { String.valueOf(userId) });

// ...

Room 持久性库

Room 持久性库是 Android Jetpack 的一部分,它是对 SQLite 的抽象层,提供了更简单、更高效的数据库操作方式。它消除了样板代码,并提供了在编译时对 SQL 查询进行验证的功能。要使用 Room,请按照以下步骤进行操作:

  1. 在项目中添加 Room:在应用级别的 build.gradle 文件中包含以下依赖项:
groovyCopy code
implementation 'androidx.room:room-runtime:2.4.0'
annotationProcessor 'androidx.room:room-compiler:2.4.0'
  1. 定义实体:实体代表数据库中的表。创建一个使用 @Entity 注解的类,并将列及其类型定义为字段。
javaCopy code
@Entity(tableName = "users")
public class User {
    @PrimaryKey
    public int id;

    public String name;
}
  1. 创建数据库:创建一个继承自 RoomDatabase 的抽象类,并定义实体和数据库版本。
javaCopy code
@Database(entities = {User.class}, version = 1)
public abstract class MyDatabase extends RoomDatabase {
    public abstract UserDao userDao();
}
  1. 访问数据:定义一个使用 @Dao 注解的数据访问对象(DAO)接口。声明用于执行数据库操作的方法。
javaCopy code
@Dao
public interface UserDao {
    @Insert
    void insert(User user);

    @Query("SELECT * FROM users")
    List<User> getAllUsers();

    // ...
}
  1. 使用 Room:使用 Room.databaseBuilder() 获取数据库实例,并访问 DAO 执行数据库操作。
javaCopy code
MyDatabase myDatabase = Room.databaseBuilder(context, MyDatabase.class, "my_database.db")
        .build();
UserDao userDao = myDatabase.userDao();

// 插入记录
User user = new User();
user.id = 1;
user.name = "John Doe";
userDao.insert(user);

// 查询记录
List<User> userList = userDao.getAllUsers();

// ...

通过利用 Room,你可以受益于其编译时检查、LiveData 集成以及简化的数据库操作等功能。

总结

在本文中,我们探讨了 Android 中的不同数据存储技术。我们从 Shared Preferences 开始存储键值对,然后深入介绍了 SQLite 数据库作为结构化数据存储的强大工具,并引入了 Room 持久性库作为一个方便且强大的 SQLite 抽象层。通过了解这些存储选项,你可以有效地管理 Android 应用程序中的数据,并提供流畅的用户体验。

在选择适当的数据存储技术时,请考虑你的应用需求和数据的性质。每个选项都有其优势和适用场景,因此在具体需求下进行评估非常重要。

转载自:https://juejin.cn/post/7232225892213932069
评论
请登录