Cursor 遍历数据库,莫名其妙出现异常大体代码:Cursor cur = getContentRessolver().query(....);
.....
....int ColNum = cur.getCoumnCount();  // 运行时,获取到的值是41String val = null;while(cur.MoveNext())
{
   for(int i = 0; i < ColNum; i++)
   {
       val = cur.getString(i);   // 此处,在外层while循环进行第四轮时,i = 10时程序崩溃,如果跳过10,i = 11或更大,均不会出现崩溃。       ....
       ...
   }
}注释处是出错原因现象,这种错误让我感到迷惑,已经在多次遇到这样的错误了
要命的是,错误我无法预知,根本不给我处理错误的机会,程序就报异常了
哪位处理过类似的问题,指导一下,不胜感激额!我是在读联系人数据库时出现的上述错误。
分不多了,全部奉上
       

解决方案 »

  1.   

    看看Logcat里写的什么异常。
    自己在adb shell里进入到数据库手动查看下是不是数据问题。
      

  2.   

    不是应该 moveToFirst,然后使用 do{}while(cur.moveToNext()); 循环的么,是不是忘记 moveToFirst 了?加 try{}catch(Exception e){e.printStackTrace();}了没?
      

  3.   

    就是程序直接崩溃,用Try Catch 无法捕获的错误,有处理办法吗?
      

  4.   

    非Root手机,无法查看数据库文件啊,不知道你说的是这个意思吗?
      

  5.   

    调用MoveToFirst了,我的错误不是出现在这里,具体现象如下:
    val = cur.getString(i); // 此处,在外层while循环进行第四轮时,i = 10时程序崩溃,如果跳过10,i = 11这错误try catch捕获不到啊,所以我上层无法处理你在啊,能否用QQ交流一下?36367977
      

  6.   

    看看 getColumnName(10) 是什么,或许是数据类型不正确,试一试 isNull(10)呢?要不,是 blob 数据导致内存溢出了?
      

  7.   

    try catch 应该是可以捕获的,要用Exception e 。才能捕获所有异常。
      

  8.   

    val = cur.getString(i);
    那是因为你需要一个不是string的数据类型,可能。
    或者数据库中第四行第十一行的数据有错误。
      

  9.   

    你把你的有关cursor操作的全部语句或者直接这个方法体中的全部语句都放到try catch中。
    try {
    全部语句
    } catch(Exception e) {
    System.out.println("cursor is exception " + e.getMessage());
    e.printStackTrace();
    } finally {
    cursor.close();
    }
    不可能抛不出异常还崩了,把异常传上来看看。要是抛不出那就是Sqlite自身的问题了。
      

  10.   


    getLong()也报同样的错误,数据有错误该怎么办呢?
      

  11.   

      已解决,Try Catch可以捕获到异常,结贴