安卓编程,当多次反复调用数据库时,可能就会出现上述的异常(一般是第二次调用就会出现)。
这是因为第一次读取的时候Cursor游标是从0开始,当调用之后,再次进入数据库查询时,游标可能没有从头开始,(数组长度一定),这样就会导致了越界。
这是报错的源码:
Uri contactData =
data.getData();
Cursor cursor = managedQuery(contactData, null, null, null,
null);
username = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
contactId = cursor.getString(cursor
.getColumnIndex(ContactsContract.Contacts._ID));
只要改成这样就行了,每次让游标cursor移动到首位,从头遍历就可以了。
Uri contactData = data.getData();
Cursor cursor = managedQuery(contactData, null, null, null,
null);
if (cursor.moveToFirst()) {
username = cursor
.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
}