Я хочу получить общую сумму дохода из моей таблицы доходов, в которой есть таблица сумм
@ColumnInfo(name = "Amount")
private int amount;
И в моем IncomeDao у меня есть
@Query("SELECT SUM(amount) from income_table")
Integer getTotalIncomeAmount();
И в моем IncomeRepository у меня есть
public Integer getTotalIncomeAmount()
{
return incomeDao.getTotalIncomeAmount();
}
В моем IncomeViewModel
public Integer getTotalIncomeAmount()
{
return incomeRepository.getTotalIncomeAmount();
}
И я вызываю это в моей главной теме, как это
totalIncome = incomeViewModel.getTotalIncomeAmount();
Но это выдает мне ошибку, что «Невозможно получить доступбазы данных в главном потоке, поскольку он потенциально может заблокировать пользовательский интерфейс на длительный период времени. '
Я знаю, что эту ошибку можно устранить, создав LiveData<Integer> getTotalIncomeAmount()
. Но я не хочу делать это по LiveData
, потому что я должен наблюдать это, что не очень хорошо в моем случае.
Я хочу, чтобы кто-то показал мне, как создать AsyncTask
этого метода вмой класс IncomeRepository
, потому что я знаю, что это единственный способ избавиться от этой ошибки. Я довольно новичок в программировании. Когда я создал другие AsyncTask
, как это в моем IncomeRepository
private static class UpdateIncomeAsyncTask extends AsyncTask<Income, Void, Void>
{
private IncomeDao incomeDao;
private UpdateIncomeAsyncTask(IncomeDao incomeDao)
{
this.incomeDao = incomeDao;
}
@Override
protected Void doInBackground(Income... incomes)
{
incomeDao.update(incomes[0]);
return null;
}
}
, мне просто нужен кто-то, кто бы закончил private static class TotalIncomeAmountAsyncTask extends AsyncTask<Void, Void, Void>
для меня. Я очень старался, но смог добиться успеха. Заранее спасибо