gpt4 book ai didi

android - 如何创建我的 get Total Income Amount() 的 AsyncTask,它是我的 Income Dao 类中的 Integer 类型函数

转载 作者:行者123 更新时间:2023-11-29 22:46:12 25 4
gpt4 key购买 nike

我想从有金额表的收入表中获取总收入金额

 @ColumnInfo(name = "Amount")
private int amount;

在我的 IncomeDao 中

 @Query("SELECT SUM(amount) from income_table")
Integer getTotalIncomeAmount();

在我的 IncomeRepository 中

public Integer getTotalIncomeAmount()
{

return incomeDao.getTotalIncomeAmount();
}

在我的收入 View 模型中

public Integer getTotalIncomeAmount()
{
return incomeRepository.getTotalIncomeAmount();
}

我在我的主线程中这样调用它

totalIncome = incomeViewModel.getTotalIncomeAmount();

但它给我的错误是“无法在主线程上访问数据库,因为它可能会长时间锁定 UI。”

我知道可以通过创建 LiveData<Integer> getTotalIncomeAmount() 来消除这个错误.但我不想通过 LiveData 做到这一点因为我必须观察它,这对我来说并不好。

我希望有人告诉我如何创建 AsyncTask这个方法在我的IncomeRepository class 因为我知道这是摆脱这个错误的唯一方法。我在编程方面相当新。当我创建其他 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>为我。我非常努力,但我可以成功。提前致谢

最佳答案

试试下面的代码,

您将在doInBackgroud 方法中从数据库中获取金额,获取值后您将在onPostExecute 方法中调用。如果你有全局变量,那么你可以直接在 doInBackgroud 方法中设置值。

private void getTotalIncomeAmount() {
class TotalIncomeAmountAsyncTask extends AsyncTask<Void, Void, Integer> {

@Override
protected Integer doInBackground(Void... voids) {

Integer value = DatabaseClient.getInstance(getApplicationContext()).getAppDatabase()
.taskDao()
.getTotalIncomeAmount();
return value;
}

@Override
protected void onPostExecute(Integer value) {
super.onPostExecute(value);
//
}
}
TotalIncomeAmountAsyncTask totalIncome = new TotalIncomeAmountAsyncTask();
totalIncome.execute();
}

关于android - 如何创建我的 get Total Income Amount() 的 AsyncTask,它是我的 Income Dao 类中的 Integer 类型函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58425494/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com