1.SharedPreferences
SharedPreferences
提供了一种方便的方法来存储少量数据,如用户设置或应用程序的配置。它使用键值对的方式来存储数据,并且所有存储的数据都是私有的,其他应用无法访问。
public void saveData(Context context) {
SharedPreferences sharedPreferences = context.getSharedPreferences("MyPrefs", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("key", "value");
editor.putInt("number", 123);
editor.apply(); // 使用apply异步提交数据
}
public String loadData(Context context) {
SharedPreferences sharedPreferences = context.getSharedPreferences("MyPrefs", Context.MODE_PRIVATE);
return sharedPreferences.getString("key", "default_value"); //default_value可以为空""
}
2. SQLite数据库
如果你需要存储结构化数据,如用户列表或商品目录,SQLite数据库是一个很好的选择。Android内置了SQLite数据库支持。
// 创建或打开一个数据库
SQLiteDatabase db = this.getWritableDatabase();
// 创建表
db.execSQL("CREATE TABLE IF NOT EXISTS Users(Name TEXT, Age INTEGER)");
// 插入数据
ContentValues values = new ContentValues();
values.put("Name", "John");
values.put("Age", 30);
db.insert("Users", null, values);
// 查询数据
Cursor cursor = db.rawQuery("SELECT * FROM Users", null);
if (cursor.moveToFirst()) {
do {
String name = cursor.getString(cursor.getColumnIndex("Name"));
int age = cursor.getInt(cursor.getColumnIndex("Age"));
// 处理每一行数据
} while (cursor.moveToNext());
}
cursor.close();
3. 文件存储
你可以在Android设备上的内部存储或外部存储中直接保存文件。这适用于存储文本文件、图片或其他任何形式的文件。
public void writeFileInternalStorage(String filename, String data, Context context) {
try {
FileOutputStream fos = context.openFileOutput(filename, Context.MODE_PRIVATE);
fos.write(data.getBytes());
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public String readFileInternalStorage(String filename, Context context) {
try {
FileInputStream fis = context.openFileInput(filename);
InputStreamReader isr = new InputStreamReader(fis);
BufferedReader bufferedReader = new BufferedReader(isr);
StringBuilder sb = new StringBuilder();
String line;
while ((line = bufferedReader.readLine()) != null) {
sb.append(line);
}
fis.close();
return sb.toString();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
4. Room数据库
Room是一个持久化库,作为SQLite的上层封装,提供了更现代化的数据库访问机制。它是Android Jetpack组件的一部分,提供了编译时的SQL检查和方便的数据库操作。
示例代码:
首先,你需要添加依赖到你的build.gradle
文件:
dependencies {
def room_version = "2.2.5"
implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version"
}
然后,定义一个实体和Dao:
@Entity
public class User {
@PrimaryKey
public int uid;
@ColumnInfo(name = "first_name")
public String firstName;
@ColumnInfo(name = "last_name")
public String lastName;
}
@Dao
public interface UserDao {
@Query("SELECT * FROM user")
List<User> getAll();
@Insert
void insertAll(User... users);
@Delete
void delete(User user);
}
@Database(entities = {User.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
public abstract UserDao userDao();
}
使用Room进行数据操作:
AppDatabase db = Room.databaseBuilder(getApplicationContext(),
AppDatabase.class, "database-name").build();
User user = new User();
user.uid = 1;
user.firstName = "John";
user.lastName = "Doe";
db.userDao().insertAll(user);
每种方法都有其适用场景,你应该根据实际需求选择最合适的存储方式。