大体代码:
Cursor cur = getContentRessolver().query(....);
.....
....
int ColNum = cur.getCoumnCount(); // 运行时,获取到的值是41
String val = null;
while(cur.MoveNext())
{
for(int i = 0; i < ColNum; i++)
{
val = cur.getString(i); // 此处,在外层while循环进行第四轮时,i = 10时程序崩溃,如果跳过10,i = 11或更大,均不会出现崩溃。
....
...
}
}
注释处是出错原因现象,这种错误让我感到迷惑,已经在多次遇到这样的错误了
要命的是,错误我无法预知,根本不给我处理错误的机会,程序就报异常了
哪位处理过类似的问题,指导一下,不胜感激额!
我是在读联系人数据库时出现的上述错误。
分不多了,全部奉上
12 个解决方案
#1
是什么异常
#2
看看Logcat里写的什么异常。
自己在adb shell里进入到数据库手动查看下是不是数据问题。
自己在adb shell里进入到数据库手动查看下是不是数据问题。
#3
不是应该 moveToFirst,然后使用 do{}while(cur.moveToNext()); 循环的么,是不是忘记 moveToFirst 了?
加 try{}catch(Exception e){e.printStackTrace();}了没?
加 try{}catch(Exception e){e.printStackTrace();}了没?
#4
就是程序直接崩溃,用Try Catch 无法捕获的错误,有处理办法吗?
#5
非Root手机,无法查看数据库文件啊,不知道你说的是这个意思吗?
#6
调用MoveToFirst了,我的错误不是出现在这里,具体现象如下:
val = cur.getString(i); // 此处,在外层while循环进行第四轮时,i = 10时程序崩溃,如果跳过10,i = 11
这错误try catch捕获不到啊,所以我上层无法处理
你在啊,能否用
QQ交流一下?36367977
#7
看看 getColumnName(10) 是什么,或许是数据类型不正确,试一试 isNull(10)呢?
要不,是 blob 数据导致内存溢出了?
要不,是 blob 数据导致内存溢出了?
#8
try catch 应该是可以捕获的,要用Exception e 。才能捕获所有异常。
#9
val = cur.getString(i);
那是因为你需要一个不是string的数据类型,可能。
或者数据库中第四行第十一行的数据有错误。
那是因为你需要一个不是string的数据类型,可能。
或者数据库中第四行第十一行的数据有错误。
#10
你把你的有关cursor操作的全部语句或者直接这个方法体中的全部语句都放到try catch中。
try {
全部语句
} catch(Exception e) {
System.out.println("cursor is exception " + e.getMessage());
e.printStackTrace();
} finally {
cursor.close();
}
不可能抛不出异常还崩了,把异常传上来看看。要是抛不出那就是Sqlite自身的问题了。
try {
全部语句
} catch(Exception e) {
System.out.println("cursor is exception " + e.getMessage());
e.printStackTrace();
} finally {
cursor.close();
}
不可能抛不出异常还崩了,把异常传上来看看。要是抛不出那就是Sqlite自身的问题了。
#11
getLong()也报同样的错误,数据有错误该怎么办呢?
#12
已解决,Try Catch可以捕获到异常,结贴
#1
是什么异常
#2
看看Logcat里写的什么异常。
自己在adb shell里进入到数据库手动查看下是不是数据问题。
自己在adb shell里进入到数据库手动查看下是不是数据问题。
#3
不是应该 moveToFirst,然后使用 do{}while(cur.moveToNext()); 循环的么,是不是忘记 moveToFirst 了?
加 try{}catch(Exception e){e.printStackTrace();}了没?
加 try{}catch(Exception e){e.printStackTrace();}了没?
#4
就是程序直接崩溃,用Try Catch 无法捕获的错误,有处理办法吗?
#5
非Root手机,无法查看数据库文件啊,不知道你说的是这个意思吗?
#6
调用MoveToFirst了,我的错误不是出现在这里,具体现象如下:
val = cur.getString(i); // 此处,在外层while循环进行第四轮时,i = 10时程序崩溃,如果跳过10,i = 11
这错误try catch捕获不到啊,所以我上层无法处理
你在啊,能否用
QQ交流一下?36367977
#7
看看 getColumnName(10) 是什么,或许是数据类型不正确,试一试 isNull(10)呢?
要不,是 blob 数据导致内存溢出了?
要不,是 blob 数据导致内存溢出了?
#8
try catch 应该是可以捕获的,要用Exception e 。才能捕获所有异常。
#9
val = cur.getString(i);
那是因为你需要一个不是string的数据类型,可能。
或者数据库中第四行第十一行的数据有错误。
那是因为你需要一个不是string的数据类型,可能。
或者数据库中第四行第十一行的数据有错误。
#10
你把你的有关cursor操作的全部语句或者直接这个方法体中的全部语句都放到try catch中。
try {
全部语句
} catch(Exception e) {
System.out.println("cursor is exception " + e.getMessage());
e.printStackTrace();
} finally {
cursor.close();
}
不可能抛不出异常还崩了,把异常传上来看看。要是抛不出那就是Sqlite自身的问题了。
try {
全部语句
} catch(Exception e) {
System.out.println("cursor is exception " + e.getMessage());
e.printStackTrace();
} finally {
cursor.close();
}
不可能抛不出异常还崩了,把异常传上来看看。要是抛不出那就是Sqlite自身的问题了。
#11
getLong()也报同样的错误,数据有错误该怎么办呢?
#12
已解决,Try Catch可以捕获到异常,结贴