【发布时间】:2021-01-05 17:23:32
【问题描述】:
也许我误解了这一切,但是您如何使用 Live Data/View Model/Repository 编辑数据?我知道如何查询所有数据,删除一个条目,但我想编辑一个特定字段。
例如,我正在跟踪 3 件事。日期、时间和类别。我需要能够更改类别。
我尝试在我的一项活动中做这样的事情:
budgetViewModel.getAllEntries().observe(this, new Observer<List<BudgetEntry>>() {
@Override
public void onChanged(List<BudgetEntry> budgetEntries) {
Log.i(TAG, "2nd Observer is going off");
if (manualUpdate == 1) {
Log.i(TAG, "MANUAL UPDATE");
budgetEntries.get(0).setCategory(updatedCategory);
manualUpdate = 0;
Log.i(TAG, "Budget Entries: " + budgetEntries.get(0).getCategory());
}
else {
Log.i(TAG, "No change");
}
}
});
}
}
但它不会永久改变它。仅对于这种情况,我猜是因为日志显示我更改了类别,但是当我重新加载应用程序或检查其他活动时,它仍然显示之前的数据。
我找不到这方面的任何教程,因此非常感谢任何指导!
新视图模型更改。我得到错误无法创建类的实例:
公共类 BudgetViewModel 扩展 AndroidViewModel {
private BudgetRepository budgetRepository;
//private LiveData<List<BudgetEntry>> allEntries;
LiveData<List<BudgetEntry>> _allEntries = budgetRepository.getAllEntries();
LiveData<List<BudgetEntry>> allEntries = Transformations.map(_allEntries, new Function<List<BudgetEntry>, List<BudgetEntry>>() {
@Override
public List<BudgetEntry> apply(List<BudgetEntry> input) {
return input;
}
});
public BudgetViewModel(@NonNull Application application) {
super(application);
budgetRepository = new BudgetRepository(application);
//allEntries = budgetRepository.getAllEntries();
}
public void insert (BudgetEntry budgetEntry) {
budgetRepository.insert(budgetEntry);
}
public void delete (BudgetEntry budgetEntry) {
budgetRepository.delete(budgetEntry);
}
public void deleteAllEntries () {
budgetRepository.deleteAllEntries();
}
public LiveData<List<BudgetEntry>> getAllEntries() {
return _allEntries;
}
public LiveData<Integer> getCount() {
return budgetRepository.getCount();
}
}
谢谢!
【问题讨论】:
标签: java android repository viewmodel android-livedata