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);

每种方法都有其适用场景,你应该根据实际需求选择最合适的存储方式。