从Android ListView中的多个游标获取数据

时间:2014-05-31 12:39:42

标签: android sql android-cursor

在我的项目中,我有两个游标。一个是从一个表处理所有书籍记录,另一个是连接两个包含租金记录和用户数据的表。我正在使用两个游标,因为加入所有游戏只显示出租的书籍,而不是全部。正是我已经想到的 - 如果你加入并且其中一列是空的,那么它将在结果光标中被省略。

问题在于我希望将其全部集中在一个ListView中。目前我已经创建了自定义CursorLoader,因为所有数据加载都是通过Loader完成的。我的自定义加载器根据元素列表返回游标列表 - 这是唯一的区别。

在我的CursorAdapter实现中,我想根据第二个游标的值将TextView的文本设置为租借或免费。

很遗憾,您无法执行以下操作:secondCursor.moveTo(bookId)因为书ID可能比secondCursor的大小大,所以它只会抛出IndexOutOfBoundsException

我也一直在测试CursorJoiner

    CursorJoiner joiner = new CursorJoiner(data.get(0)/*first cursor*/, 
new String[]{Tables.BOOK_ID}, data.get(1)/*second cursor*/, new String[]{Tables.RENT_COLUMN_BOOK_ID});
            int i = 0;
            while(joiner.hasNext()){
                CursorJoiner.Result result = joiner.next();
                i++;
                switch(result){
                case BOTH:
                    DebugLog.i("Both: " + i);
                case LEFT:
                    break;
                case RIGHT:
                    break;
                default:
                    break;
                }
            }

问题在于它无法正常工作 - i值相应地更改为第一个光标。即使在切换CursorJoiner构造函数游标后也是如此。

在短时间内我一直在考虑使用ExtednedCursor,但添加列中的值总是相同,所以没用。

我的问题是 - 你知道如何实现我的目标吗?

1 个答案:

答案 0 :(得分:0)

我找到了问题的答案。我想我应该从这开始。我一直在使用INNER JOIN创建新表,其中只包含两个表中的值。相反,我应该使用OUTER JOIN加入所有记录,无论如何。