Android中如何存储对象ArrayList并在APP退出后保留数据?
如何用TinyDB存储自定义对象ArrayList并持久化数据
嘿,我来帮你搞定这个问题!TinyDB确实是Android上很方便的轻量存储工具,不过要存自定义对象的ArrayList,得先做几个关键步骤,下面一步步来:
1. 让你的FoodModel类支持序列化
TinyDB本质是基于SharedPreferences的,而SharedPreferences只能存基本类型和可序列化的对象。所以首先要让FoodModel实现Serializable接口(这是最简单的方式):
import java.io.Serializable; public class FoodModel implements Serializable { private String foodName; private String date; private String foodLink; // 空构造函数(序列化必须) public FoodModel() {} // Getter和Setter方法 public String getFoodName() { return foodName; } public void setFoodName(String foodName) { this.foodName = foodName; } public String getDate() { return date; } public void setDate(String date) { this.date = date; } public String getFoodLink() { return foodLink; } public void setFoodLink(String foodLink) { this.foodLink = foodLink; } }
2. 完善save方法,用TinyDB存储ArrayList
首先确保你已经把TinyDB的Java类引入到项目中(直接复制源码到项目即可)。然后修改你的save方法,完成完整的存储逻辑:
import com.example.yourpackage.TinyDB; // 替换成你的TinyDB实际包路径 public void save(View view) { // 初始化TinyDB,传入上下文 TinyDB tinyDB = new TinyDB(getApplicationContext()); // 创建并填充FoodModel对象 FoodModel foodModel = new FoodModel(); foodModel.setFoodName(FoodName); // 这里要确保FoodName是你从UI获取的有效数据,比如EditText.getText().toString() foodModel.setDate(Date); foodModel.setFoodLink(FoodLink); // 把对象加入ArrayList ArrayList<FoodModel> savedList = new ArrayList<>(); savedList.add(foodModel); // 如果需要追加已有数据,可以先读取旧列表再添加: // ArrayList<FoodModel> savedList = tinyDB.getListObject("saved_foods", FoodModel.class); // savedList.add(foodModel); // 用TinyDB存储列表,第一个参数是存储的key,后续是列表和对象类型 tinyDB.putListObject("saved_foods", savedList); }
3. 重启APP后读取持久化的列表
当你需要在APP重启后获取保存的数据时,调用TinyDB的getListObject方法即可:
// 在需要读取数据的地方,比如Activity的onCreate方法里 TinyDB tinyDB = new TinyDB(getApplicationContext()); ArrayList<FoodModel> savedList = tinyDB.getListObject("saved_foods", FoodModel.class); // 遍历列表使用数据 if(savedList != null && !savedList.isEmpty()){ for(FoodModel food : savedList){ Log.d("FoodData", "食物名称: " + food.getFoodName() + ", 日期: " + food.getDate()); } }
关键说明
- TinyDB会把你的ArrayList转成JSON字符串,存储在SharedPreferences里,而SharedPreferences的数据是持久化的——即使APP退出、手机重启,只要用户不手动清除APP数据,数据就会一直保留。
- 如果你的
FoodModel里包含其他自定义对象,也要确保那些对象同样实现Serializable接口,否则序列化会失败。 - 记得替换代码里的包路径和变量,确保
FoodName、Date、FoodLink是你从UI或其他渠道获取到的有效数据。
内容的提问来源于stack exchange,提问作者Sundos Altamimi
相关产品推荐
相关产品推荐

