zoukankan      html  css  js  c++  java
  • Android SQL数据库应用实践 “问题点”“疑难点”“解析”

    应用 Android SQL 数据库时,遇到的问题:

    场景1:Android SQL查询后,获取到Cursor并查询数据;遇到以下问题:"android.database.CursorIndexOutOfBoundsException: Index -1 requested"

    D/Demo    (22249): [ContackPickerActivity] onItemClick::cursor.getCount()=70; position=1
    D/Demo    (22249): [ContackPickerActivity] outUri.toString()=content://com.android.contacts/contacts/2
    D/Demo    (22249): [ContactPickerTestActivity] onActivityResult::requestCode=1000
    D/Demo    (22249): [ContactPickerTestActivity] onActivityResult::PICK_CONTACK running...
    D/Demo    (22249): [ContactPickerTestActivity] onActivityResult::contackData=content://com.android.contacts/contacts/2
    D/Demo    (22249): [ContactPickerTestActivity] ERROR is detected...android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1

    源代码如下:

            switch (requestCode) {
                case PICK_CONTACK:
                    if (resultCode == Activity.RESULT_OK) {
                        LogUtil.d(TAG, "onActivityResult::PICK_CONTACK running...");
                        Uri contactData = data.getData();
                        LogUtil.d(TAG, "onActivityResult::contackData="
                                + contactData.toString());
                        Cursor cursor = getContentResolver().query(contactData,
                                null, null, null, null);
                        if (cursor != null) {
                            String name;
                            try {
                                name = cursor
                                        .getString(cursor
                                                .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME_PRIMARY));
                                cursor.close();
                                TextView tv = (TextView) findViewById(R.id.selected_contact_textview);
                                tv.setText(name);
                            } catch (Exception e) {
                                e.printStackTrace();
                                LogUtil.d(TAG,
                                        "ERROR is detected..." + e.toString());
                            }
                        }
                    }
                    break;
                default:
                    break;
            }

    问题出在以下点:

    name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME_PRIMARY));

    在使用query()查询时,返回结果描述如下:

         * @return A Cursor object, which is positioned before the first entry, or null

    Cursor指针指向的是查询结果的前一位置,在这之后调用的getColumnIndex()出现超出“边界”的异常。

    解决办法:调用moveToFirst()即可

    if (cursor != null && cursor.moveToFirst()) {
        String name;
        try {
            name = cursor
                    .getString(cursor
                            .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME_PRIMARY));
            cursor.close();
            TextView tv = (TextView) findViewById(R.id.selected_contact_textview);
            tv.setText(name);
        } catch (Exception e) {
            e.printStackTrace();
            LogUtil.d(TAG,
                    "ERROR is detected..." + e.toString());
        }
    }
  • 相关阅读:
    vijos 1894 セチの祈り
    luogu p1378 经验之谈
    審視自己
    高斯消去法的相關拓展
    通用汇点
    重征之战
    有文化的人吟了一句诗
    2016年7月总结
    BZOJ 1026: [SCOI2009]windy数
    BZOJ 1047: [HAOI2007]理想的正方形
  • 原文地址:https://www.cnblogs.com/CVstyle/p/6388136.html
Copyright © 2011-2022 走看看