我从数据库中提取项目。我有一些编辑文本,我需要从这些可编辑的文本中获取文本并传递该文本,更新我从数据库中获取的列表的对象。我从“编辑文本”中获取值。这是它在代码中的外观:
String getNasteMonday = etNasteMonday != null ? etNasteMonday.getText().toString() : null;
String getInsulinMondayBeforeBreak = etInsulinMondayBeforeBreak != null ? etInsulinMondayBeforeBreak.getText().toString() : null;
List<Day> days = mDatabase.getAllDaysByWeek(week.getTitle());
double nasteValue = convertStringToDouble(getNasteMonday);
double insulinBeforeBreakValue = convertStringToDouble(getInsulinMondayBeforeBreak);
for (Day day : days) {
day.setNaste(nasteValue);
day.setInsulinBeforeBreak(insulinBeforeBreakValue);
mDatabase.updateDay(day);
}
在这种情况下,我在数据库中有三个表,一个用于存储天数,一个用于存储周,一个用于存储数周。我在这种情况下按周名称提取数据,每周对象有7天,我需要在该周内为每一天存储不同的值。现在,我得到的是,在这个foreach循环中,我在所有7天内存储相同的值并且我不想要这样。我想做这样的事情,例如:
for (Day day1 : days) {
day1.setNaste(nasteValue);
}
for (Day day2 : days) {
day2.setNaste(nasteValue2);
}
修改
当我从数据库中提取数据时,如何在EditText中显示文本:
我应该从字符串数组中设置文本。
List<String> values = new ArrayList<>();
int[] ids = new int[]{R.id.et_naste_monday, R.id.et_insulin_monday_before_breakf, R.id.et_posle_dorucka_monday, R.id.et_pre_rucka_moday,
R.id.et_insulin_monday_pre_rucka, R.id.et_posle_rucka_monday, R.id.et_pre_vecere_moday, R.id.et_insulin_monday_pre_vecere, R.id.et_posle_vecere_monday,
R.id.et_pred_spavanje_moday, R.id.et_insulin_monday_pred_spavanje};
List<Day> days = mDatabase.getAllDaysByWeek(week.getTitle());
int count = 0;
for (int id : ids) {
EditText t = (EditText) findViewById(id);
values.add(t.getText().toString());
t.addTextChangedListener(this);
applyChangedEditTextColor(false, values, t);
// Here i should implement some logic like and apply for all edittexts
// for (Day day : days) {
//
// }
}
答案 0 :(得分:1)
因为你有很多EditText要使用。我会创建一些Arrays来存储实例,并在循环中恢复它们。
EditText[] nasteEdit = new EditText[]{ /* your seven instance of editText for naste value in correct order */};
List<Day> days = mDatabase.getAllDaysByWeek(week.getTitle());
int cntDays = 0;
for (Day day : days) {
String getNasteMonday = nasteEdit[cntDays] != null ? nasteEdit[cntDays].getText().toString() : null;
double nasteValue = convertStringToDouble(getNasteMonday);
day.setNaste(nasteValue);
// SAME FOR OTHER ATTRIBUTE
mDatabase.updateDay(day);
cntDays++;
}
在循环期间,我得到正确的EditText并创建值。我在这里保留你的迭代循环并使用外部计数器,但这应该有效。
您只需为Day
所拥有的每个属性执行此操作即可。
数组需要拥有EditText的实例,所以不要浪费时间来获取每个文本;)
希望这会有效,我现在无法测试它。
答案 1 :(得分:0)
我找到了解决方案。更好的方法是使用常规for循环并使用List中的方法get()来获取元素在列表中的位置。
for (int i = 0; i < days.size(); i++) {
Day day1 = days.get(0);
day1.setNaste(3.0);
Day day2 = days.get(1);
day2.setNaste(2.0);
Day day3 = days.get(2);
Day day4 = days.get(3);
Day day5 = days.get(4);
Day day6 = days.get(5);
Day day7 = days.get(6);
}
如果您需要更新数据库中的某些数据,那么您将在for循环之外声明对象Day,并在数据库的update方法中调用该对象:
database.updateDay(day1);
database.updateDay(day2);