我想要导入联系人并将其显示在set serveroutput on;
DECLARE
lv_sql VARCHAR2(1000);
lv_cnt PLS_INTEGER;
BEGIN
lv_sql:='select count(*) from tab1';
dbms_output.put_line(lv_sql);
--EXECUTE IMMEDIATE lv_sql INTO lv_cnt;
END
中。
这是我的光标加载器
ListView
我的适配器是
ContentResolver cr = getActivity().getContentResolver();
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,
null, null, null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC");
mAdapter = new ContactsAdapter(getActivity(), cur, true, null);
setListAdapter(mAdapter);
这是我的bindview
for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
// do what you need with the cursor here
String name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
Log.e("name", name + "\n" + cursor.getCount());
names.add(name);
}
getIndexList();
@Override
public void bindView(View view, Context context, Cursor cursor) {
// Gets handles to individual view resources
final ViewHolder holder = (ViewHolder) view.getTag();
String displayName = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
for (phoneCursor.moveToFirst(); !phoneCursor.isAfterLast(); phoneCursor.moveToNext()) {
// do what you need with the cursor here
String phoneNum = phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
Log.e("phoneNum", phoneNum);
mCheckBox.setTag(phoneNum);
if (selectedNums.contains(phoneNum)) {
mCheckBox.setChecked(true);
} else {
mCheckBox.setChecked(false);
}
}
到达结尾时,我的代码崩溃了。如果有2个联系人我收到错误
java.lang.IllegalStateException:无法将光标移动到位置2
同样,如果我有n个联系人就是这种情况。
我见过this question但在那里找不到任何答案。请帮忙
这是日志
ListView
我找不到显示的错误行。这让我很困惑
答案 0 :(得分:2)
感谢您的帮助。此问题与getCount()
有关。我之前做过这个,之后我没有注意到。
@Override
public int getCount() {
return names.size();
}
我删除了它,它工作正常。谢谢你的帮助
答案 1 :(得分:1)
只需使用
cursor.moveToFirst();
while (cursor.moveToNext()){
//do something
}
在你的for循环中,你正在比较光标是不是afterlast,这意味着,如果它是最后一个,它仍将执行moveToNext,它不存在
或者如果您想坚持使用for循环,只需替换
!cursor.isAfterLast()
与
!cursor.isLast()