【发布时间】:2020-06-08 10:34:20
【问题描述】:
我正在开发一个将事务存储在本地 SQLite 本地数据库中的应用程序,我正在使用 Room。我有 2 个活动,包括 MainActivity,其中我有一个包含所有事务(添加、删除事务)的回收器视图,还有一个按钮,可以将您带到具有事务图表的其他活动(图表活动)。
现在,如果数据库中没有交易,我不想让用户转到 Chart 活动(因为那里什么都看不到)。
这是我道中的查询:
@Query("SELECT * FROM transaction_table WHERE amount < 0 AND strftime('%m', creationDate) = :month")
LiveData<List<Transaction>> getNegativeTransactionsByMonth(String month);
我的仓库:
public LiveData<List<Transaction>> getAllNegativeTransactionsByMonth(String month) {
return transactionDao.getNegativeTransactionsByMonth(month);
}
我的视图模型
public LiveData<List<Transaction>> getAllNegativeTransactionsByMonth(String month) {
return repository.getAllNegativeTransactionsByMonth(month);
}
主活动:
btnChart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final LiveData<List<Transaction>> viewModelData2 = transactionViewModel.getTransactionsByMonth(currentMonth);
viewModelData2.observe(MainActivity.this, new Observer<List<Transaction>>() {
@Override
public void onChanged(List<Transaction> transactions) {
if(!transactions.isEmpty()) {
Intent intent = new Intent(getApplicationContext(), ChartActivity.class);
intent.putExtra("SELECTED_MONTH_NUMBER", SELECTED_MONTH_NUMBER);
startActivity(intent);
} else {
Toast.makeText(MainActivity.this, "Add a negative transaction to look at the chart", Toast.LENGTH_SHORT).show();
}
}
});
}
});
在上面的代码中,我有一个用于将您带到图表活动的按钮的侦听器。我为 ViewModel 数据创建了一个观察者,并将逻辑放在未更改的方法中,如果事务不为空,则启动图表活动,如果不显示 toast。
问题是每次创建新事务(运行未更改的方法)时都会运行 if 子句。我不想要这个,我希望 if 子句仅在我按下图表按钮时运行。
我知道使用 LiveData 可能无法实现我想要实现的目标。 这就是为什么我要求一种从数据库中获取事务列表并检查它是否为空的方法。欢迎任何帮助。谢谢。
【问题讨论】:
标签: android android-sqlite android-room android-livedata