猿问

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

也许这有点愚蠢,但我只是坚持这个:


我有我的房间数据库 + 实体 + 道。


实体有一个名为“成本”的列 - 所以基本上我想总结所有成本(当然,在跟踪是否有新输入时,所以检查总和是否已更改 - 如果是,当然更改值/文本视图)然后简单地将带有 .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);

}}


烙印99
浏览 85回答 1
1回答

函数式编程

您应该为合成列提供别名(即使没有它也可以工作,但一般来说,访问域聚合函数结果的列名更容易):SELECT&nbsp;SUM(costs)&nbsp;AS&nbsp;value&nbsp;FROM&nbsp;subscriptions并且当一个查询期望返回某些东西void(什么都没有)时,它应该是实际返回的数据类型;对于货币价值,请LiveData尝试LiveData<BigDecimal>。该文档还有一个相关示例,可能会更详细地解释它。
随时随地看视频慕课网APP

相关分类

Java
我要回答