前语
数据存储是 Android 运用开发的一个关键方面。不管你需要存储用户偏好设置、缓存数据还是耐久保存结构化信息,了解 Android 中的各种数据存储选项至关重要。在本文中,咱们将逐步深化探讨 Android 中的不同数据存储技能,从基础知识开始逐步深化更高级的选项。
SharedPreferences
SharedPreferences 是一种轻量级且简略的存储键值对的办法。通常用于存储用户偏好设置或小量数据。运用 SharedPreferences,按照以下过程进行操作:
-
初始化:运用
getSharedPreferences()
办法获取 SharedPreferences 目标的引证。你能够从运用程序上下文或活动上下文中获取 SharedPreferences 目标。
javaCopy code
SharedPreferences sharedPreferences = getSharedPreferences("my_preferences", Context.MODE_PRIVATE);
-
写入数据:运用
edit()
办法获取 SharedPreferences.Editor 的实例,然后运用不同的putX()
办法存储所需的数据类型。
javaCopy code
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("username", "John");
editor.putInt("age", 25);
editor.apply();
-
读取数据:运用相应的
getX()
办法检索数据,指定键并在键不存在时供给默认值。
javaCopy code
String username = sharedPreferences.getString("username", "默认值");
int age = sharedPreferences.getInt("age", 0);
SQLite 数据库
关于结构化数据存储,Android 供给了强壮的联系型数据库办理系统 SQLite。它供给了运用 SQL 查询来办理数据的高效办法。以下是在 Android 中运用 SQLite 的办法:
-
创立数据库:扩展
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);
}
// ...
}
-
履行数据库操作:运用
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,请按照以下过程进行操作:
-
在项目中增加 Room:在运用级别的
build.gradle
文件中包括以下依靠项:
groovyCopy code
implementation 'androidx.room:room-runtime:2.4.0'
annotationProcessor 'androidx.room:room-compiler:2.4.0'
-
界说实体:实体代表数据库中的表。创立一个运用
@Entity
注解的类,并将列及其类型界说为字段。
javaCopy code
@Entity(tableName = "users")
public class User {
@PrimaryKey
public int id;
public String name;
}
-
创立数据库:创立一个承继自
RoomDatabase
的笼统类,并界说实体和数据库版本。
javaCopy code
@Database(entities = {User.class}, version = 1)
public abstract class MyDatabase extends RoomDatabase {
public abstract UserDao userDao();
}
-
拜访数据:界说一个运用
@Dao
注解的数据拜访目标(DAO)接口。声明用于履行数据库操作的办法。
javaCopy code
@Dao
public interface UserDao {
@Insert
void insert(User user);
@Query("SELECT * FROM users")
List<User> getAllUsers();
// ...
}
-
运用 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 运用程序中的数据,并供给流通的用户体会。
在挑选适当的数据存储技能时,请考虑你的运用需求和数据的性质。每个选项都有其优势和适用场景,因此在具体需求下进行评估非常重要。