首页 > 解决方案 > 为什么是这个列表没有在 Room 数据库中存储任何数据?

问题描述

我正在使用数据库中的双精度值来填充图表。我使用List<String>相同的方法同时添加项目,所以这个列表中也应该有项目。中的项目List<String>已正确保存,但List<Double>大小为 0。也许问题出在类型转换器上?

以下是我使用类型转换器保存到 Room 数据库的方法: Convertors.class

@TypeConverter
    public String fromDoubleArray(List<Double> values) {
        String string = "";
        for(double d : values)
            string += (d + ",,,");

        return string;
    }

    @TypeConverter
    public List<Double> toDoubleArray(String concatenatedStrings) {
        List<Double> doubleList = new ArrayList<>();
        String[] doubleStrings = concatenatedStrings.split(",,,");
        for (int i=0; i<doubleList.size(); i++) {
            doubleList.add(Double.parseDouble(doubleStrings[i]));
        }

        return doubleList;
    }

这就是我添加列表项的方式:

List<Double> balanceHistory = selectedAccount.getBalanceHistory();
balanceHistory.add(newBalance);
selectedAccount.setBalanceHistory(balanceHistory);
accountsViewModel.update(selectedAccount);

道类:

@Dao
public interface AccountsDao {

    @Insert
    void insert(Account account);

    @Update
    void update(Account account);

    @Delete
    void delete(Account account);

    @Query("SELECT * FROM accounts_table")
    List<Account> getAllAccounts();

    @Query("SELECT * FROM accounts_table")
    LiveData<List<Account>> getAllAccountsLive();

}

账户类:

@Entity(tableName = "accounts_table")
public class Account implements Serializable {

    @PrimaryKey(autoGenerate = true)
    private int id;
    private List<Double> balanceHistory;
    //codes...
    
    public Account(.....List<Double> balanceHistory....) {
        this.balanceHistory = balanceHistory;
        //....
    }

    public List<Double> getBalanceHistory() {
        return balanceHistory;
    }

    public void setBalanceHistory(List<Double> balanceHistory) {
        this.balanceHistory = balanceHistory;
    }

    //codes...
}

AccountsDatabase

@Database(entities = {Account.class}, version = 2, exportSchema = false)
@TypeConverters(Converters.class)
public abstract class AccountsDatabase extends RoomDatabase {

    private static AccountsDatabase instance;

    public abstract AccountsDao accountsDao();

    public static synchronized AccountsDatabase getInstance(Context context) {
        if (instance == null) {
            instance = Room.databaseBuilder(context.getApplicationContext(),
                    AccountsDatabase.class, "accounts_database")
                    .fallbackToDestructiveMigration()
                    .build();
        }
        return instance;
    }
}

标签: androidarraylisttype-conversionandroid-room

解决方案


推荐阅读