当房间数据库为空并尝试运行此查询时,应用程序崩溃并显示空异常

Posted

技术标签:

【中文标题】当房间数据库为空并尝试运行此查询时,应用程序崩溃并显示空异常【英文标题】:Application Crashes and showing null exception when room database is empty and try to run this query 【发布时间】:2021-12-22 18:16:02 【问题描述】:

查询:

@Query("SELECT SUM(productPrice) FROM VitalCafeCart")
    LiveData<Integer> getSum();

当数据库中有行时,这个工作正常的结果。 我正在使用观察者来获得结果。

这里是观察者代码。

LiveData<Integer> sum = AppDatabase.getInstance(mContext).atcDao().getSum();
            Observer<Integer> cartTotalObserver = new Observer<Integer>() 
                @Override
                public void onChanged(Integer integer) 

                        if (integer == 0) 
                            linearGotoCart.setVisibility(View.GONE);
                         else 
                            shopDetailsTotalPrice.setText("Rs."+String.valueOf(integer));
                            linearGotoCart.setVisibility(View.VISIBLE);
                        

                
            ;
            sum.observe(getActivity(), cartTotalObserver);

【问题讨论】:

【参考方案1】:

你可以使用:-

@Query("SELECT coalesce(SUM(productPrice),0) FROM VitalCafeCart")

coalesce 函数使用第一个非空值,因此如果总和为空,则为 0。

或者你可以使用

@Query("SELECT total(productPrice) FROM VitalCafeCart")

total 聚合函数相当于 sum 永远不会返回 null 而是 0.0

【讨论】:

以上是关于当房间数据库为空并尝试运行此查询时,应用程序崩溃并显示空异常的主要内容,如果未能解决你的问题,请参考以下文章

sql 语句查询判断是不是为空并关联

如何使用连接表检查房间查询中的空参数?

如何检查参数是不是为空并在查询中检查它

c# RazorPages ModelState Errors 属性为空并导致异常

主机名不能为空并出现错误:任务“:app:uploadCrashlyticsMappingFileRelease”执行失败

检查输入值是不是为空并显示警报