You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:23:21