JChunn 2020-03-06 11:14 采纳率: 50%
浏览 743

(Java) Android的Room数据库,通过date查询某一个月的数据,写好接口但似乎并没有返回数据,什么原因呢?

根据谷歌安卓开发者文档开发,使用了room+livedata+viewmodel+repository多个架构。

1.bean文件,存Date

    @ColumnInfo(name = "date")
    private Date date;

         public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

2.dao文件接口

@Query("SELECT * FROM Bill WHERE date BETWEEN :From AND :To ORDER BY id ASC")
    LiveData<List<Bill>> getBillsByMon(Date From,Date To);

3.room数据库不支持直接使用date,需要使用Converters

public class DateConverters {
    @TypeConverter
    public static Date fromTimestamp(Long value) {
        return value == null ? null : new Date(value);
    }

    @TypeConverter
    public static Long dateToTimestamp(Date date) {
        return date == null ? null : date.getTime();
    }
}

4.billdatabase相关代码

@Database(entities = {Bill.class},version = 1,exportSchema = false)
@TypeConverters({DateConverters.class})
public abstract class BillRoomDatabase extends RoomDatabase {
    public abstract BillDao billDao();
}

5.问题主要在这里吧,activity中传了calendar,在repository转为date

        public LiveData<List<Bill>> getAllBillsByMonth(Calendar calendar) {
        Date dateFrom= Utils.ToMinDateInMonthByCal(calendar);
        Date dateTo= Utils.ToMaxDateInMonthByCal(calendar);
        LiveData<List<Bill>> mAllBillsByMonth = mbillDao.getBillsByMon(dateFrom, dateTo);
        return mAllBillsByMonth;
    }

utils方法代码,测试过应该对。

    //Cal-->date:当月最后一天
    public static Date ToMaxDateInMonthByCal(Calendar calendar){
        Date date = calendar.getTime();
        date.setMonth(date.getMonth() + 1);
        date.setDate(0);
        return date;
    }

    //Cal-->date:当月第一天
    public static Date ToMinDateInMonthByCal(Calendar calendar){
        Date date = calendar.getTime();
        date.setDate(1);
        return date;
    }

然后返回mAllBillsByMonth这个LiveData数据似乎为空,在recycler的adapter像返回全部数据那样调用,数据没有获取到,感觉是date的问题?

  • 写回答

1条回答 默认 最新

  • 关注
    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器