android 您访问的页面不存在!

zkure5ic  于 2023-04-18  发布在  Android
关注(0)|答案(3)|浏览(86)

我想使用SimpleCursorAdapter来填充我的ListActivity,但我得到了一个典型的异常,因为我的Cursor中没有'_id'字段。不幸的是,这种类型的查询没有为我提供一个字段,我可以使用my _id字段的形式:

SELECT DISTINCT room from tblRates WHERE resid='ABC' AND date='2011-10-17'

由于DISTINCT,我不能只添加_id。那么除了设置一个自定义适配器之外,我还能做些什么呢?
顺便说一句,我已经看过这篇文章了,所以我明白为什么我会得到错误。只是想知道如何在我正在做的查询类型中获得一个_id:
Android column '_id' does not exist?

neskvpey

neskvpey1#

你可以做这样的事。。

SELECT DISTINCT room, 1 _id from tblRates WHERE resid='ABC' AND date='2011-10-17'

这将为每一行添加一个值为1的_id列。另外,我认为sqlite为每个表都有一个隐藏的“rowid”列,如果你想让列的值不同而不是1的话。

hkmswyz6

hkmswyz62#

那么,除了设置自定义适配器之外,我还能做些什么呢?
除了自定义的Adapter方法之外,您还可以使用CursorWrapper来添加自己的_id值。只需从1或其他开始顺序编号,并且不要试图将它们用作数据库中的实际键。:-)

更新

即兴发挥...
步骤1:创建CursorWrapper的子类。
第2步:挂起 Package 的CursorgetColumnCount()值,这里称为N
第3步:重写getColumnCount()以返回N+1
第3步:重写getColumnIndex()以返回N作为_id列索引。
第4步:覆盖所有其他以int columnIndex为参数的方法。如果索引不是N,则将工作委托给 Package 的Cursor;否则,您可以自己实现它(或者在不可能或不方便的情况下抛出一个RuntimeException,并且您不需要它)。对于getInt()getLong()实现(不确定CursorAdapter使用哪个),返回一些可能的唯一值(例如,只需通过getPosition()使用您的位置)。
步骤5:创建子类的示例,用DISTINCT子句 Package Cursor,并将其交给CursorAdapter

zqry0prt

zqry0prt3#

使用SQLiteDatabase中的“query”方法可能会有所帮助。
比如说

SQLiteDatabase db = openHelper.getReadableDatabase();
Cursor c = db.query(
             "tblRates", 
             new String[] { "_id", "room" }, 
             "resid=? AND date=?", 
             new String[] { "ABC", "2010-10-17" }, 
             "room", 
             null, 
             "room");
SimpleCursorAdapter a = new SimpleCursorAdapter(
                           getActivity(), 
                           android.R.layout.simple_dropdown_item_1line, 
                           c, 
                           new String[] { "room" }, 
                           new int[] { android.R.id.text1 }, 
                           0);

相关问题