为了账号安全,请及时绑定邮箱和手机立即绑定

Android Room - 汇总值并将其放入 TextView

Android Room - 汇总值并将其放入 TextView

烙印99 2022-06-04 11:01:52
也许这有点愚蠢,但我只是坚持这个:我有我的房间数据库 + 实体 + 道。实体有一个名为“成本”的列 - 所以基本上我想总结所有成本(当然,在跟踪是否有新输入时,所以检查总和是否已更改 - 如果是,当然更改值/文本视图)然后简单地将带有 .toString() 的值放入 TextView。我已经有一个带有适配器/视图模型/存储库类的 RecyclerView+CardView(他们只将输入的名称放入 CardView)我只是不知道将成本放在哪里 - 我认为我不需要一个新的 ViewModel/Repository 但是我应该把我的 Dao 的 sumAllCost() 方法放在哪里public class SubRepository {private SubDAO mSubDao;private LiveData<List<Sub>> mAllSubs;SubRepository(Application application){    SubDatabase db = SubDatabase.getInstance(application);    mSubDao = db.getsubDAO();    mAllSubs = mSubDao.getAllSubs();}public LiveData<List<Sub>> getAllSubs(){    return mAllSubs;}public void insert (Sub sub){    new insertAsyncTask(mSubDao).execute(sub);}private static class insertAsyncTask extends AsyncTask<Sub, Void, Void> {    private SubDAO mAsyncTaskDao;    insertAsyncTask (SubDAO dao){        mAsyncTaskDao = dao;    }    @Override    protected Void doInBackground(final Sub... params){        mAsyncTaskDao.addSub(params[0]);        return null;    }}}public class SubViewModel extends AndroidViewModel {private SubRepository mRepository;private LiveData<List<Sub>> mallSubs;public SubViewModel (Application application) {    super (application);    mRepository = new SubRepository(application);    mallSubs = mRepository.getAllSubs();}public LiveData<List<Sub>> getAllSubs(){    return mallSubs;}public void insert (Sub sub){    mRepository.insert(sub);}}
查看完整描述

1 回答

?
函数式编程

TA贡献1807条经验 获得超9个赞

您应该为合成列提供别名(即使没有它也可以工作,但一般来说,访问域聚合函数结果的列名更容易):

SELECT SUM(costs) AS value FROM subscriptions

并且当一个查询期望返回某些东西void(什么都没有)时,它应该是实际返回的数据类型;对于货币价值,请LiveData尝试LiveData<BigDecimal>。该文档还有一个相关示例,可能会更详细地解释它。


查看完整回答
反对 回复 2022-06-04
  • 1 回答
  • 0 关注
  • 84 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信