我在android应用程序中尝试了usign OrmLite,并遇到了问题:

我在一个对象上创建了一个外部集合,并为其分配了一些对象。我可以在DAO上使用queryForAll()方法来查询对象,并按预期返回它们:

allTeams = getHelper().getTeamDao().queryForAll();
for(ScrumTeam team : allTeams) {
    if(team.getMembers() == null || team.getMembers().size() == 0) {
        log("No Members");
    } else {
        log(team.getMembers().size()+" Members");
    }
}


这将按预期方式工作,在团队上打印“ 2个成员”或“ 3个成员”,代表正确的数据。

显然,我想对数据进行排序,而我发现的方法是使用queryBuilder:

allTeams = getHelper().getTeamDao().queryBuilder().selectColumns("id", "name").orderBy("name", true).query();
for(ScrumTeam team : allTeams) {
    if(team.getMembers() == null || team.getMembers().size() == 0) {
        log("No Members");
    } else {
        log(team.getMembers().size()+" Members");
    }
}


上面的代码输出“没有成员”,但是我可以完美地访问团队的其他数据(ID和名称)。我尝试将集合中的渴望值设置为true和false,但均无效。我进一步调查发现,成员数组未初始化(空)。这是一个错误,还是我错误地使用了库?有没有办法手动获取ForeigCollection?

多谢您的回覆!

最佳答案

有趣。问题是您将列限制为"id""name"。因此,ORMLite不会为您创建ForeignCollection字段。

这是一个错误,已在4.30版中修复。我们添加了在ForeignCollection中指定selectColumns()列名称的功能。这是围绕此的错误修复:


  https://sourceforge.net/tracker/?func=detail&aid=3428751&group_id=297653&atid=1255989


您需要修改您的QueryBuilder代码以同时“选择” members字段。

...selectColumns("id", "name", "members")...


这是selectColumns()方法的文档:


  http://ormlite.com/docs/select-columns


去引用:


  警告:如果您指定要返回的任何列,则除非它们的ForeignCollectionField.columnName也在列表中,否则任何外部集合字段都将返回为null。

关于android - ForeignCollection未随查询生成器一起加载,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7900088/

10-12 06:12