上一篇
安卓开发入门数据
- 行业动态
- 2025-04-23
- 3016
安卓开发入门数据存储常用SharedPreferences、SQLite、文件及网络存储,掌握基础API与数据操作是
安卓开发入门数据存储与管理
数据存储方式
存储方式 | 特点 | 适用场景 |
---|---|---|
SharedPreferences | 轻量级键值对存储,本质为XML文件 | 简单配置、用户偏好设置 |
SQLite数据库 | 关系型数据库,支持SQL语句操作 | 结构化数据存储、复杂查询 |
文件存储 | 以文件形式保存数据(如文本、二进制) | 媒体文件、配置文件持久化 |
Room持久库 | 基于SQLite的抽象层,提供编译时校验和流畅API | 复杂数据库操作、MVVM架构 |
网络数据缓存 | 使用OkHttp缓存或第三方库(如Retrofit+Cache) | 网络请求结果临时存储 |
常用数据解析格式
JSON解析
- 库:
Gson
、Moshi
、FastJSON
- 示例:
Gson gson = new Gson(); User user = gson.fromJson(jsonString, User.class);
- 库:
XML解析
- 库:
PullParser
、DOM/SAX
、Simple
- 示例:
XmlResourceParser parser = getResources().getXml(R.xml.config); // 读取节点属性和值
- 库:
数据库操作实践(以Room为例)
定义实体类
@Entity(tableName = "users") public class User { @PrimaryKey(autoGenerate = true) public int id; @ColumnInfo(name = "name") public String name; // 其他字段... }
创建DAO接口
@Dao public interface UserDao { @Insert void insert(User user); @Query("SELECT FROM users WHERE id = :userId") User getUserById(int userId); }
配置数据库
@Database(entities = {User.class}, version = 1) public abstract class AppDatabase extends RoomDatabase { public abstract UserDao userDao(); }
使用数据库
AppDatabase db = Room.databaseBuilder(context, AppDatabase.class, "app-db").build(); UserDao userDao = db.userDao(); userDao.insert(new User(...));
数据绑定与ViewModel
数据绑定
- 在布局文件中使用
<layout>
标签:<data> <variable name="user" type="com.example.User"/> </data> <TextView android:text="@{user.name}" />
- 在Activity中设置数据:
User user = new User("John"); binding.setVariable(BR.user, user);
- 在布局文件中使用
ViewModel使用
- 定义ViewModel:
public class UserViewModel extends ViewModel { private MutableLiveData<User> user = new MutableLiveData<>(); public void setUser(User u) { user.setValue(u); } public LiveData<User> getUser() { return user; } }
- 在Activity中观察:
UserViewModel viewModel = new ViewModelProvider(this).get(UserViewModel.class); viewModel.getUser().observe(this, user -> { // 更新UI });
- 定义ViewModel:
常见问题与解答
问题1:SharedPreferences的commit()
和apply()
有什么区别?
解答:
commit()
:同步提交,返回布尔值表示是否成功,会阻塞主线程。apply()
:异步提交,无返回值,不会阻塞主线程,推荐在UI线程使用。
问题2:Room相比直接使用SQLite的优势是什么?
解答:
- 编译时校验:通过注解生成代码,避免运行时错误。
- 简化操作:自动处理SQLite的繁琐操作(如迁移、多线程)。
- 流畅API:支持LiveData和RxJava,适配现代安卓架构(如MVVM)。