应用 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. 项目管理——WBS工作分解法

    首先我们要了解什么是WBS工作分解法 工作分解结构(Work Breakdown Structure,简称WBS)跟因数分解是一个原理,就是把一个项目,按一定的原则分解,项目分解成任务,任务再分解成一 ...

  2. centos7下tomcat8.5安装部署与优化

    转自:https://www.cnblogs.com/busigulang/articles/8529719.html centos 7 Tomcat 8.5 的安装及生产环境的搭建调优 一 安装to ...

  3. jenkins持续集成原理

    转载: 原文地址:http://www.2cto.com/kf/201609/544550.html 持续集成 开发中,我们经常遇到一些奇怪问题,比如本地可以编译成功的代码但是同事们更新代码后编译出错 ...

  4. c# mvc 在控制器中动态解析cshtml文件并获取对应的html代码

    public static string GetViewHtml(ControllerContext context, string viewName, Object param) { if (str ...

  5. DirectX11 With Windows SDK--17 利用几何着色器实现公告板效果

    前言 上一章我们知道了如何使用几何着色器将顶点通过流输出阶段输出到绑定的顶点缓冲区.接下来我们继续利用它来实现一些新的效果,在这一章,你将了解: 实现公告板效果 Alpha-To-Coverage 对 ...

  6. 2018-2019-2 实验一 Java开发环境的熟悉

    实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用IDEA编辑.编译.运行.调试Java程序 实验知识点 1. JVM.JRE.JDK的安装位置与区别: 2. 命令行运行javac:ja ...

  7. 第七节:语法总结(1)(自动属性、out参数、对象初始化器、var和dynamic等)

    一. 语法糖简介   语法糖也译为糖衣语法,是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方 ...

  8. Elasticsearch6.3.2启动过程源码阅读记录

    Elasticsearch6.3.2启动过程源码阅读记录 网上有很多关于es的源码分析,觉得自己技术深度还不够,所以这些文章只是看源码过程中的一个笔记,谈不上分析. 整个启动过程以类名.方法名,按顺序 ...

  9. css 兼容各种iPhone

    @media (device-height:480px) and (-webkit-min-device-pixel-ratio:2){/* 兼容iphone4/4s */ .class{} } @m ...

  10. linux 远程 telnet

    linux 远程 telnet [ root@test1 ~]# yum install telnet* (安装的三个包  xinetd . telnet-server.telnet)   [ roo ...