依照惯例我们先来看下谷歌官方文档对游标适配器的介绍,该适配器可以将数据库的数据暴露给ListView,将数据显示在LIstView空间上。特别注意的一点是,官方文档上写道游标必须包含一个列命名为“_id”,否则这个类将不会工作。此外,使用与这个类MergeCursor不会工作如果合并后的游标有重叠的的“_id”列中的值。 通过对官网文档的解读,我们就可以知道通过游标适配器访问数据库库的表单的数据,一定要创建一列名为"_id",否则就会报错。现在lets,go!

MainAcitivity的代码

package com.example.f13_cursor02;import com.example.f13_cursor.dao.DBManager;import android.os.Bundle;
import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.support.v4.widget.SimpleCursorAdapter;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.ListView;public class MainActivity extends Activity {private Button button;private ListView listView;private SimpleCursorAdapter adapter;//生命一个游标适配器private DBManager dbManager;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);dbManager = new DBManager(this);listView = (ListView) this.findViewById(R.id.listView1);button = (Button) this.findViewById(R.id.button1);Cursor cursor = dbManager.query("person", null, null, null, null, null,null, null);adapter = new SimpleCursorAdapter(this, R.layout.item, cursor,new String[] { "name", "address" }, new int[] { R.id.textView1,R.id.textView2 });listView.setAdapter(adapter);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubContentValues contentValues=new ContentValues();contentValues.put("name", "jack");contentValues.put("address", "hangzhou");dbManager.insert("person", null, contentValues);}});adapter.notifyDataSetChanged();}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}

MyOpenHelper类的代码,该类继承SQLiteOpenHelper,用于创建数据库。

package com.example.f13_cursor.dao;import android.content.Context;
import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;public class MyOpenHelper extends SQLiteOpenHelper {private static final int DATABASE_VERSION = 1;private static final String PERSON_TABLE_NAME = "person";public MyOpenHelper(Context context) {super(context, PERSON_TABLE_NAME, null, DATABASE_VERSION);// TODO Auto-generated constructor stub}@Overridepublic void onCreate(SQLiteDatabase db) {// TODO Auto-generated method stubdb.execSQL("create table "+ PERSON_TABLE_NAME+ "(_id integer primary key autoincrement,name varchar(64),address varchar(64))");}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {// TODO Auto-generated method stub}}

DBManager类,用于对数据库进行增删改查

package com.example.f13_cursor.dao;import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;public class DBManager {private MyOpenHelper helper;private SQLiteDatabase database;public DBManager(Context context) {// TODO Auto-generated constructor stubhelper = new MyOpenHelper(context);database = helper.getWritableDatabase();}public boolean insert(String table, String nullColumnHack,ContentValues values) {boolean flag = false;long count = database.insert(table, nullColumnHack, values);flag = count > 0 ? true : false;return flag;}public Cursor query(String table, String[] columns, String selection,String[] selectionArgs, String groupBy, String having,String orderBy, String limit) {Cursor cursor = null;cursor = database.query(table, columns, selection, selectionArgs,groupBy, having, orderBy);return cursor;}public void conn() {if (database != null) {database.close();}}
}

Android开发之通过CursorAdapter读取数据(源代码分享)相关推荐

  1. android 从文件制定位置读取数据

    今天,简单讲讲android 如何从制定的位置读取文件. 之前,我写了使用FileInputStream使用read(byte[] b)读取文件的博客,每次调用read()时,FileInputStr ...

  2. python读文件和写文件-python开发--从文件中读取数据和写入文件

    #! /usr/bin/env python -*- coding:utf-8 -*- """ @Author:gcan @Email:1528667112@qq.com ...

  3. Android中,Sqlite数据库读取数据为空的问题

    公司使用的触摸屏出现了一个奇怪的问题,在app中读取数据,只是简单的select * from table 也查询不到数据. [问题描述] 后来发现是有两个module单例分别连接数据库,一个modu ...

  4. Android开发人员不得不收集的代码,分享一点面试小经验

    一.背景介绍 从实用角度梳理一篇能够帮大家快速扫盲的CMake基础教程,也是对我目前负责项目的一次学习总结.既然选择从项目实用性考虑,下面的讲解内容可能并不一定完整,更多的是符合项目目前使用到的一些特 ...

  5. android 开发书签大全,一站式的导航分享!

    #一.描述 此资源是转载而来,只为需要而用. #二.书签大全 ###Android大神 android-dev-cn Trinea 郭神 任玉刚 鸿洋 夏安明 徐医生 daimajia stormzh ...

  6. Android开发应该了解的Binder原理,分享PDF高清版

    正文 Android行业主要问题是初级Android太多了,会写xml和Activity的程序员太多了,初中级程序员面临很大的竞争,现状也就偏于高级开发者.越来越多的初中级Android程序员找不到满 ...

  7. Android开发7:简单的数据存储(使用SharedPreferences)和文件操作

    前言 啦啦啦~大家好,又见面啦~ 本篇博文讲和大家一起完成一个需要注册.登录的备忘录的,一起学习 SharedPreferences 的基本使用,学习 Android 中常见的文件操作方法,复习 An ...

  8. Android 开发中使用Intent传递数据的方法

    Activity之间通过Intent传递值,支持基本数据类型和String对象及它们的数组对象byte.byte[].char.char[].boolean.boolean[].short.short ...

  9. android 包裹内容,Android开发中Bundle用法 包裹数据

    SDK里是这样描述:A mapping from String values to various Parcelable types. 它帮助我将数据打包传入intent里面,为使用这些数据提供了便利 ...

最新文章

  1. 协同工作流引擎,开启流程优化新纪元
  2. Win7远程桌面不能连接的解决方案
  3. 【今日CS 视觉论文速览】Thu, 14 Feb 2019
  4. Netty(二)(入门篇)传统的Bio编程
  5. Retrofit使用
  6. linux卸载时提示未安装,Ubuntu 安装卸载软件命令,及出现没有可用软件包提示时的处理办法...
  7. 算法复习周------“贪心问题之‘单源最短路径’”
  8. 夜间灯光数据下载(DMSP/OLS,NPP/VIIRS、珞珈一号网址)
  9. python获取网易云的歌词和时间戳
  10. python输出姓名_Python简单生成随机姓名的方法示例
  11. 在线计算机响声,怎么在线录制电脑内部声音
  12. 深圳移动 神州行(大众卡/轻松卡/幸福卡)套餐资费(含香港日套餐)信息及使用方法
  13. .NET 6 中的 Http Logging 中间件
  14. 你遇到过哪些质量很高的 Java 面试?
  15. 接近开关常开开关和常闭长闭的区别?
  16. 阿里云国际站实名认证上传材料填写样例(域名持有者为组织)
  17. 学习国家颁布的三部信息安全领域法律,理解当前工作中的信息安全合规要求
  18. beeline连接hive的两种方式
  19. vue实战-实现换主题/皮肤功能
  20. vue+element实现滚动公告栏效果

热门文章

  1. 链路 英文_光纤链路基础
  2. mysql节假日表_节假日常见的数据库磁盘空间处理小结
  3. oracle中聚合比较函数,Oracle聚合函数/分析函数
  4. keil git 编译文件_keil下的STM32程序开发部署(一)
  5. 二、应用层协议概述与HTTP
  6. 使用 markdown-it 解析 markdown 代码(读 VuePress 三)
  7. 开源仓库Harbor搭建及配置过程
  8. OARCLE11G的密码管理
  9. 加锁查询 FOR UPDATE 解决表格查询极慢的问题
  10. TreaponseHeader