#android #arraylist #type-conversion #android-room
#Android #arraylist #преобразование типов #android-room
Вопрос:
Я использую двойные значения из базы данных для заполнения диаграммы. Я использую List<String>
для добавления элементов тем же методом и в то же время, поэтому в этом списке тоже должны быть элементы. Элементы в List<String>
сохраненных файлах возвращаются правильно, но List<Double>
размер равен 0. Может быть, проблема в преобразователях типов?
Вот как я использую преобразователи типов для сохранения в базе данных номеров: 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:
@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;
}
}
Комментарии:
1. Добавьте свой класс DAO
2. Где класс Account и конвертеры для него
3. @StanislavBatura только что добавил их тоже