应用 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());
}
}

Android SQL数据库应用实践 “问题点”“疑难点”“解析”的更多相关文章

  1. 数据库优化实践【MS SQL优化开篇】

    数据库定义: 数据库是依照某种数据模型组织起来并存在二级存储器中的数据集合,此集合具有尽可能不重复,以最优方式为特定组织提供多种应用服务,其数据结构独立于应用程序,对数据的CRUD操作进行统一管理和控 ...

  2. 基于Sql Server 2008的分布式数据库的实践(五)

    原文 基于Sql Server 2008的分布式数据库的实践(五) 程序设计 ------------------------------------------------------------- ...

  3. 基于Sql Server 2008的分布式数据库的实践(四)

    原文 基于Sql Server 2008的分布式数据库的实践(四) 数据库设计 1.E-R图 2.数据库创建 Win 7 1 create database V3 Win 2003 1 create  ...

  4. 基于Sql Server 2008的分布式数据库的实践(三)

    原文 基于Sql Server 2008的分布式数据库的实践(三) 配置PHP 1.打开PHP配置文件,找到extension=php_mssql.dll,将前面的注释符号去掉 2.找到mssql.s ...

  5. 基于Sql Server 2008的分布式数据库的实践(二)

    原文 基于Sql Server 2008的分布式数据库的实践(二) 从Win7连接Win2003的Sql Server 2008 1.新建链接服务器链接到Win2003的Sql Server 2008 ...

  6. 基于Sql Server 2008的分布式数据库的实践(一)

    原文 基于Sql Server 2008的分布式数据库的实践(一) 配置Sql Server 2008(Win7) 1.打开SQL server2012,使用windows身份登录 2.登录后,右键选 ...

  7. Android - 数据存储 -在SQL数据库中保存数据

    对于重复的或结构化的数据,保存到数据库中是很好的选择,比如联系人信息.这里假设你对SQL数据库大体上了解然后帮助你学习Android上的SQLite数据库.在Android数据库上需要用到的API可以 ...

  8. 【Android Developers Training】 26. 在SQL数据库中保存数据

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  9. Android学习笔记——保存数据到SQL数据库中(Saving Data in SQL Databases)

    知识点: 1.使用SQL Helper创建数据库 2.数据的增删查改(PRDU:Put.Read.Delete.Update) 背景知识: 上篇文章学习了保存文件,今天学习的是保存数据到SQL数据库中 ...

随机推荐

  1. Aerospike-内存和硬盘混合存储的kv数据库

    为什么会有Aerospike? Redis是一个纯内存型数据库,性能上没有多大问题. 但这又带来一个新问题,内存是很贵的,所以全内存的存储成本非常昂贵.为了节省成本,我们需要把一部分不经常用到的数据存 ...

  2. require.js使用教程

    require.js使用教程 下载require.js, 并引入 官网: http://www.requirejs.cn/ github : https://github.com/requirejs/ ...

  3. Pandas系列(十一)-文件IO操作

    数据分析过程中经常需要进行读写操作,Pandas实现了很多 IO 操作的API,这里简单做了一个列举. 格式类型 数据描述 Reader Writer text CSV read_ csv to_cs ...

  4. CMDB服务器管理系统【s5day89】:部分数据表结构-资产入库思路

    1.用django的app作为统一调用库的好处 1.创建repository app截图如下: 2.好处如下: 1.app的本质就是一个文件夹 2.以后所有的app调用数据就只去repository调 ...

  5. 第四节:框架前期准备篇之进程外Session的两种配置方式

    一. 基本介绍 1. 背景:Asp.Net默认的Session机制是进程内,存储在服务器端内存中,有这么几个缺点: ①:既然存在内存中,空间有限,不能存储大数据量信息,数据量多的话Session会被挤 ...

  6. python学习04

    数据类型-list,tuple 1) 1.1.list的表现方法:[1,2,3,4,5,6] 1.2.计算list的长度用 len() 1.3 list中的索引 a =[1,2,3,4,5] a[1] ...

  7. 部署自己的服务器ubuntu

    一直都是在公司的服务器上工作,想搞点自己的idea比较不方便,所以近期租了要给自己的阿里云服务器. 以下为必要的软件的安装流程: jdk+jre: 1.去官网下载 jdk-linux版本: 2.解压压 ...

  8. css和css3弹性盒模型实现元素宽度(高度)自适应

    一.css实现左侧宽度固定右侧宽度自适应 1.定位 <!DOCTYPE html> <html lang="en"> <head> <me ...

  9. 🍓JavaScript 对象原型链继承的弊端 🍓

  10. hiho 1098 最小生成树二·Kruscal算法 (最小生成树)

    题目: 时间限制:10000ms 单点时限:1000ms 内存限制:256MB   描述 随着小Hi拥有城市数目的增加,在之间所使用的Prim算法已经无法继续使用了——但是幸运的是,经过计算机的分析, ...