为了账号安全,请及时绑定邮箱和手机立即绑定

迭代Android游标的最佳方法是什么?

迭代Android游标的最佳方法是什么?

慕森卡 2019-07-31 15:07:07
迭代Android游标的最佳方法是什么?我经常看到代码涉及迭代数据库查询的结果,对每一行做一些事情,然后继续前进到下一行。典型的例子如下。Cursor cursor = db.rawQuery(...);cursor.moveToFirst();while (cursor.isAfterLast() == false) {     ...     cursor.moveToNext();}Cursor cursor = db.rawQuery(...);for (boolean hasItem = cursor.moveToFirst();       hasItem;       hasItem = cursor.moveToNext()) {     ...}Cursor cursor = db.rawQuery(...);if (cursor.moveToFirst()) {     do {         ...                      } while (cursor.moveToNext());}这些对我来说似乎过于冗长,每次都有多次调用Cursor方法。当然必须有一个更简洁的方式?
查看完整描述

3 回答

?
噜噜哒

TA贡献1784条经验 获得超7个赞

最简单的方法是:

while (cursor.moveToNext()) {
    ...}

游标第一个结果行之前开始,因此在第一次迭代时,如果存在,则移动到第一个结果。如果光标为空,或者已经处理了最后一行,则循环退出整齐。

当然,完成后不要忘记关闭光标,最好是在finally子句中。

Cursor cursor = db.rawQuery(...);try {
    while (cursor.moveToNext()) {
        ...
    }} finally {
    cursor.close();}

如果您的目标是API 19+,则可以使用try-with-resources。

try (Cursor cursor = db.rawQuery(...)) {
    while (cursor.moveToNext()) {
        ...
    }}


查看完整回答
反对 回复 2019-07-31
?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

我只想指出第三种替代方案,如果光标不在起始位置也可以使用:

if (cursor.moveToFirst()) {
    do {
        // do what you need with the cursor here
    } while (cursor.moveToNext());}


查看完整回答
反对 回复 2019-07-31
  • 3 回答
  • 0 关注
  • 997 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信