Android Studio(数据存储)

数据存储方式

方式 特点
文件存储 openFileInput()和openFileOutput()进行存写
SharedPreferences 以XML格式进行存储
SQLite 运算快、占用资源少、支持基本的sql语法
ContentProvider 可用于应用之间的数据交互
网络存储 通过网络提供的存储空间来存储/获取数据信息

文件存储

主要语法
java 复制代码
FileOutputStream fos = openFileOutput(String filename,int mode);
FileInputStream fis = openFileInput(String filename);
mode desc
Context.MODE_PRIVATE 该文件为当前程序私有
Context.MODE_APPEND 该文件的内容可以追加
Context.MODE_WORLD_READABLE 该文件的内容可以被其他程序"读"
Context.MODEL_WORLD_WRITEABLE 该文件的内容可以被其他程序"写"
代码示例
java 复制代码
//参考对象为内存:从内存输出即写入、输入到内存即读取

// 1.写入数据到文件
String fileName = "myfile.txt";
String data = "Hello, World!";
try {
    FileOutputStream fos = openFileOutput(fileName, Context.MODE_PRIVATE);
    fos.write(data.getBytes());
    fos.close();
} catch (IOException e) {
    e.printStackTrace();
}

// 2.从文件中读取数据
try {
    FileInputStream fis = openFileInput(fileName);
    InputStreamReader isr = new InputStreamReader(fis);
    BufferedReader br = new BufferedReader(isr);
    StringBuilder sb = new StringBuilder();
    String line;
    while ((line = br.readLine()) != null) {
        sb.append(line);
    }
    fis.close();
    String savedData = sb.toString();
} catch (IOException e) {
    e.printStackTrace();
}

SharedPreferences

简要

以XML方式的轻量级存储,适合存储少量的键值对数据,适用于简单的配置信息、用户偏好设置和应用程序状态等,比如登录的用户名。

语法
java 复制代码
// 存储数据到 SharedPreferences
SharedPreferences sharedPreferences = getSharedPreferences("MyPrefs", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("key", "value");
editor.apply();

// 从 SharedPreferences 中读取数据
String savedValue = sharedPreferences.getString("key", "default value");

SQLite

语法
java 复制代码
// 1. 创建实现类extends SQLiteOpenHelper
public class DBHelper extends SQLiteOpenHelper {
    private static final String DATABASE_NAME = "myDb.db";
    private static final int DATABASE_VERSION = 1;
    private Context context;

    public DBHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        this.context = context;
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        
    }


    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        
    }

}


// 2. 创建实现类对象,并调用相关方法实现CRUD
DBHelper dbHelper = new DBHelper(context);
SQLiteDatabase db = dbHelper.getWritableDatabase();
Cursor cursor = db.rawQuery("SELECT * FROM myTable", null);
while (cursor.moveToNext()){
    int id = cursor.getInt(cursor.getColumnIndexOrThrow("id"));
    ...
}
cursor.close();
ContentValues

SQLiteDatabase对象自身提供了一些CRUD方法,像表记录添加、修改,理应上需要我们传入多个字段(包括字段名和字段值),而为了解决这个问题就有了ContentValues对象,它允许我们给其增加多个键(字段名)、值(字段值);

所以当我们执行这个SQLiteDatabase对象的自身提供的添加或修改方法只用传入ContentValues即可。

可以参考下面代码例子:

java 复制代码
ContentValues values = new ContentValues();
values.put("name", "John Doe");
values.put("age", 30);
values.put("email", "johndoe@example.com");

// 插入数据到数据库
long newRowId = db.insert("myTable", null, values);

后言

至于ContentProvider和网络存储这两种存储方式只有结合具体的需求项目才能更好地学习,这里就不介绍了,需要学习的可以自己搜索相关文章具体学习。

相关推荐
朱涛的自习室3 小时前
我给 Gemini 4 和 DeepSeek 搞了套「末位淘汰」,AI 干活会更猛吗?(Day 3)
android·前端·后端
应用市场9 小时前
离线小游戏做“每日挑战”:日期当随机种子,整局存成 JSON,再加一个“我不是机器人”
android·kotlin·游戏开发
一铭1119910 小时前
海豹办公 1.9.15 跨端办公软件实践 文档兼容 Access 数据库与移动 WebView 排错
android·数据库·electron·开源软件·access
geats人山人海10 小时前
java 7异常
android·java·开发语言
2601_9620710011 小时前
Kimi K3 vs DeepSeek V4-Pro实测对比:2026年同一入口十道题,耗时与token消耗差在哪
android·java·数据库
2501_9159184111 小时前
在 Xcode 中运行和调试单元测试的完整指南
ide·vscode·macos·ios·单元测试·个人开发·xcode
右手吉他13 小时前
高通平台IA APN问题分析之二
android·物联网
夜雪一千13 小时前
MySQL 自增 ID 的底层原理与坑点
android·mysql·adb
不浪费一个字节13 小时前
一个纯 Python 实现的 APK 解析与设备操控工具箱
android
itmigrate13 小时前
PHP 导出大 CSV 时内存溢出的一次排查
android·开发语言·php