转自【eoe:Android开发者门户
http://www.eoeandroid.com/forum.php?mod=viewthread&tid=54757】
在许多时候需要将数据库表中的数据显示在ListView、Gallery等组件中。虽然可以直接使用Adapter对象处理,但工作量很大。为此,Android SDK提供了一个专用于数据绑定的Adapter类:SimpleCursorAdapter。
SimpleCursorAdapter与SimpleAdapter用法相近。只是将List对象换成了Cursor对象。而且SimpleCursorAdapter类构造方法的第四个参数from表示Cursor对象中的字段,而SimpleAdapter类构造方法的第四个参数from表示Map对象中的key。除此之外,这两个Adapter类在使用方法完全相同。
下面是SimpleCursorAdapter类构造方法定义。
public SimpleCursorAdapter(Context context,int layout,Cursor c,String[] from,int[] to);
下例中通过SimpleCursorAdapter类将数据库表绑定在ListView上,也就是说,该ListView会显示数据表的全部记录。在绑定数据前,需要先编写一个SQLiteOpenHelper类的子类,用于操作数据库,代码如下:
package com.li;
import java.util.Random;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DBService extends SQLiteOpenHelper {
private final static int DATABASE_VERSION = 1;
private final static String DATABASE_NAME = "test.db";
public DBService(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
//创建表
String sql = "CREATE TABLE [t_test](" + "[_id]AUTOINC,"
+ "[name]VARCHAR2(20) NOT NULL CONFLICT FAIL,"
+ "CONSTRAINT[sqlite_autoindex_te_test_1]PRIMARY KEY([_id]))";
db.execSQL(sql);
//向test数据库中插入20条记录
Random random = new Random();
for ( int i = 0;i<20;i++)
{
String s = "";
for(int j=0;j<10;j++)
{
char c = (char)(97+random.nextInt(26));
s+=c;
}
db.execSQL("insert into t_test(name)values(?)",new Object[]{s});
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
//执行查询语句
public Cursor query(String sql,String[] args)
{
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(sql, args);
return cursor;
}
}
本例不需要对test.db进行升级,因此,只有在DBService类中的oncreate()方法中有创建数据库表的代码。DBService类创建了一个test.db数据库文件,并在该文件中创建了t_test表。在该表中包含两个字段_id和name。其中_id是自增字段,并且是主索引。
下面编写MapsDemo类。MapsDemo类是ListActivity的子类。在该类中的oncreate()方法中创建了DBService对象,然后通过DBService类的query方法查询出t_test表中的所有记录,并返回Cursor对象。MapsDemo类的代码如下:
package com.li;
import android.app.ListActivity;
import android.database.Cursor;
import android.os.Bundle;
import android.widget.SimpleCursorAdapter;
public class MapsDemo extends ListActivity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
DBService dbService = new DBService(this);
//查询数据
Cursor cursor = dbService.query("select * from t_test", null);
//绑定数据
SimpleCursorAdapter simpleCursorAdapter = new SimpleCursorAdapter (this,android.R.layout.simple_expandable_list_item_1,cursor,new String[]{"name"},new int[]{android.R.id.text1});
setListAdapter(simpleCursorAdapter);
}
}
SimpleCursorAdapter类构造方法的第四个参数表示返回Cursor对象中的字段名,第五个参数表示要将该字段的值赋给那个组件。该组件在第二个参数中指定的布局文件中定义。
注意:在绑定数据时,Cursor对象返回的记录集中必须包含一个叫"_id"的字段,否则将无法完成数据绑定。也就是说SQL语句不能是select name from t_contacts.如果在数据表中没有"_id"字段,可以采用其他方法来处理。
读到这里可能有人要问:数据存到哪里去了?系统在手机内存中的/data/data/<package name>/databases目录中创建数据库文件。
分享到:
相关推荐
总之,SimpleCursorAdapter是Android开发中连接SQLite数据库和ListView的重要工具,它简化了数据绑定的过程,使开发者能更专注于业务逻辑,而不是数据展示的细节。通过熟练掌握SimpleCursorAdapter,你可以更加高效...
它帮助我们将数据库中的数据绑定到ListView或其他视图组件,使得数据可视化。本篇文章将深入讲解如何使用SimpleCursorAdapter来实现SQLite数据库查询结果的显示。 1. **SQLite数据库基础** SQLite是一个文件级别的...
SimpleCursorAdapter 是另外一个常用的 Adapter,它可以将数据库中的数据绑定到 ListView 中。它的构造函数与 SimpleAdapter 相似,但它关联的数据保存在 Cursor 对象中。 Cursor 对象是 Android 中用于存储和操作...
`SimpleCursorAdapter`是Android提供的一种特殊类型的Adapter,主要用于将SQLite数据库中的数据绑定到ListView、GridView等视图组件上。本篇文章将深入探讨`SimpleCursorAdapter`的使用方法及其在实际开发中的应用。...
SimpleCursorAdapter是用来连接Cursor对象与视图(View)的桥梁,它将Cursor中的每一行数据映射到视图的各个字段。它的构造函数通常接受以下参数:上下文(Context),目标视图的布局资源ID,定义数据列和视图映射的字符...
总结,ArrayAdapter适用于简单的数据绑定,SimpleCursorAdapter适用于SQLite数据库,而SimpleAdapter则适用于非数据库的Map数据结构。理解并灵活运用这三种Adapter,能够帮助开发者高效地利用ListView展示数据。
在很多时候需要将表中的数据显示在ListView、Gallery等控件中,虽然可以直接使用BaseAdapter进行处理,但工作量比较大,Android SDK提供了一个专用于数据绑定的Adapter:SimpleCursorAdapter。 SimpleCUrsorAdapter...
ArrayAdapter适合简单的数据绑定,BaseAdapter提供了更大的灵活性,SimpleAdapter简化了Map数据源的绑定,而SimpleCursorAdapter则专为SQLite数据库设计。开发者可以根据实际需求选择合适的适配器,提高代码的可读性...
这可以通过在Activity或Fragment中编写逻辑来实现,或者使用MVVM架构,将数据绑定到ViewModel,然后在视图层响应变化。 7. 性能优化: - 使用Loader框架:Android的`LoaderManager`可以帮助我们在后台异步加载数据...
2. **SimpleCursorAdapter基本用法**:SimpleCursorAdapter是一个简化了的数据绑定类,用于将Cursor中的数据绑定到ListView等组件上,使数据展示更加直观便捷。 3. **上下文菜单基本用法**:上下文菜单是在用户界面...
本篇文章将详细介绍如何在Android中通过ListView实现数据绑定显示的三种方法。以下是详细步骤: ### 方法一:使用SimpleAdapter 首先,我们需要创建一个布局文件(如`item.xml`),这个文件定义了一个列表项的样式...
2. **SimpleCursorAdapter**:专为与SQLite数据库配合使用,将Cursor对象映射到UI组件,方便将数据库内容呈现在ListView中。它需要将Cursor的字段与UI控件的id关联起来。 3. **SimpleAdapter**:具有较好的扩展性,...
移动信息仓库数据存储是关于如何在移动设备上有效地管理和存储数据的重要主题。在这个领域,我们主要关注Android系统,因为它是目前最广泛使用的移动操作系统之一,它提供了多种方式来存储和检索应用程序所需的数据...
2. **设置Spinner数据**: 可以通过`ArrayAdapter`或者`SimpleCursorAdapter`将数据绑定到Spinner。如果是从数据库获取数据,通常会使用`SimpleCursorAdapter`。 3. **监听Spinner选择事件**: 通过`...
Adapter的使用极大地简化了数据绑定的过程,让开发者可以专注于数据处理和界面设计。 Adapter体系结构的核心在于,它连接了一个 AdapterView(如ListView、GridView)与数据源,负责提供数据项到View的映射。...
6. 数据绑定与视图:在Android的SQLite使用中,可以结合CursorLoader和LoaderManager实现异步数据加载,提高用户体验。此外,还可以使用CursorAdapter或SimpleCursorAdapter将Cursor数据绑定到UI组件,如ListView。 ...
它的构造函数通常需要Context、布局资源ID、列名数组(用于从Cursor中提取数据)、视图ID数组(用于填充列表项的各个部分)和一个可选的CursorToViewBinder对象,用于自定义数据绑定逻辑。 在实际应用中,...
CursorAdapter比SimpleCursorAdapter更灵活,它允许自定义数据绑定逻辑。继承CursorAdapter后,你可以重写`bindView(View view, Context context, Cursor cursor)`方法来自定义每行数据的显示。CursorAdapter还提供...
数据绑定涉及Row Layout的定义,列与控件的映射,以及自定义View和ListAdapter以优化数据展示。 对于数据密集型应用,ListActivity是理想的选择,它提供内置的ListView和默认Row Layout。开发者还可以自定义Layout...