当前位置:首页>行业动态> 正文

安卓开发写入数据

安卓开发写入数据可通过SharedPreferences、SQLite、文件存储或网络请求

SharedPreferences存储

适用场景:轻量级键值对数据(如用户设置、登录状态)
存储位置/data/data/包名/shared_prefs/
APIgetSharedPreferences()edit()putString()apply()

操作步骤代码示例说明
获取实例SharedPreferences sp = getSharedPreferences("config", MODE_PRIVATE);创建或打开指定文件
写入数据sp.edit().putString("username", "admin").apply(); |apply()异步提交,commit()同步
读取数据String name = sp.getString("username", "default");默认值防止空指针

注意事项

  • 键值对类型需匹配(putString()对应getString()
  • 频繁调用edit()会覆盖之前未提交的修改

文件存储

适用场景:文本/二进制文件(如配置文件、缓存数据)
存储位置/data/data/包名/files/(内部存储)或Environment.getExternalStorageDirectory()(SD卡)
APIopenFileOutput()openFileInput()

文件类型写入方式读取方式权限注意
文本文件FileOutputStreamBufferedReader需声明WRITE_EXTERNAL_STORAGE权限(Android 10+需特殊处理)
二进制文件FileOutputStreamFileInputStreamSD卡存储需动态申请权限

示例代码

安卓开发写入数据  第1张

// 写入内部存储
FileOutputStream fos = openFileOutput("data.txt", Context.MODE_PRIVATE);
fos.write("Hello".getBytes());
fos.close();
// 读取内部存储
BufferedReader br = new BufferedReader(new FileReader(getFilesDir()+"/data.txt"));
String line = br.readLine(); // 读取内容

SQLite数据库

适用场景:结构化数据(如用户信息、订单记录)
核心组件SQLiteOpenHelper(版本管理)、SQLiteDatabase(增删改查)

操作步骤关键代码说明
创建数据库SQLiteOpenHelper helper = new DBHelper(context);<br>SQLiteDatabase db = helper.getWritableDatabase(); |onCreate()方法执行表结构创建
插入数据ContentValues cv = new ContentValues();<br>cv.put("name", "John");<br>db.insert("users", null, cv);自动处理SQL拼接
查询数据Cursor cursor = db.query("users", null, "id=?", new String[]{"1"}, null, null, null);返回结果集需手动关闭

注意事项

  • 数据库升级需重写onUpgrade()方法
  • 主线程操作数据库会抛出异常,需使用AsyncTaskExecutor

ContentProvider存储

适用场景:跨应用数据共享(如访问通讯录、图片库)
核心APIContentResolver.insert()query()update()delete()

操作类型代码示例说明
插入数据ContentValues values = new ContentValues();<br>values.put(ContactsContract.Data.DISPLAY_NAME, "Alice");<br>resolver.insert(ContactsContract.Data.CONTENT_URI, values); | 需处理Uri返回值
查询数据Cursor cursor = resolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); | 需处理权限(如READ_CONTACTS

网络存储

适用场景:云端数据同步(如用户登录信息、文件上传)
常用方式:Retrofit+OKHttp、Volley、Firebase Cloud Firestore

技术栈特点适用场景
Retrofit基于注解的HTTP客户端RESTful API交互
Firebase实时数据库聊天应用、实时协作
Volley轻量级网络库图片加载、小规模数据请求

示例代码(Retrofit)

// 定义接口
public interface ApiService {
    @POST("/user/login")
    Call<ResponseBody> login(@Body Map<String, String> credentials);
}
// 发送请求
Retrofit retrofit = new Retrofit.Builder()
    .baseUrl("https://example.com")
    .addConverterFactory(GsonConverterFactory.create())
    .build();
ApiService service = retrofit.create(ApiService.class);
service.login(credentials).enqueue(new Callback<>() { ... });

相关问题与解答

Q1:SharedPreferences和文件存储有什么区别?

A1
| 对比维度 | SharedPreferences | 文件存储 |
|———|——————|———-|
| 数据格式 | 键值对(XML存储) | 文本/二进制 |
| 性能 | 适合少量高频读写 | 适合大文件或复杂结构 |
| 用途 | 配置、状态保存 | 日志、缓存文件 |

Q2:如何安全升级SQLite数据库版本?

A2

  1. 版本号管理:在SQLiteOpenHelper中重写onUpgrade()
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        if (oldVersion < 2) {
            db.execSQL("ALTER TABLE users ADD COLUMN age INTEGER"); // 添加新列
        }
    }
  2. 数据迁移策略
    • 备份旧数据 → 修改表结构 → 恢复数据
    • 使用db.execSQL()执行迁移脚本
  3. 测试覆盖:在开发阶段模拟多版本升级,验证数据