您的位置:首页 > 移动开发 > Android开发

Android数据存取

2012-04-06 09:11 197 查看
2012-02-13 17:2818人阅读评论(0)收藏举报

程序是数据的输入、处理和输出的过程,不管是操作系统还是应用程序都不可避免要用到大量的数据。由于内存容量有限,且不能长期保存数据,因此一般把他们以文件的形式保存在磁盘等持久的存储介质中。操作系统一般是以文件的形式来保存数据的,而应用程序一般是以数据库来保存数据。

在手机这种特殊设备里,也经常会存取一些数据。例如,音频文件、视频文件、图片文件和通讯录等数据。Android作为一种手机操作系统,提供了如下几种存数数据的方式:Preference(配置)、File(文件)、SQLite数据和网络,可以根据程序的实际需要选择合适的存取方式。

另外,在Android中各个应用程序组件之间是相互独立的,彼此的数据不能共享。为了实现数据的共享,Android提供了Content Provider组件来实现应用程序之间数据的共享。

一、Preference

Preference提供了一种轻量级的数据存取方法,应用场合主要是数据比较少的配置信息。它以“键-值”(是一个Map)对的方式将数据保存在一个XML配置文件中。例如,我们设置了一个手机开机问候语,可以将其以Preference方式来进行配置。

1、Preference简介

使用Preference来存取数据,用到了SharedPreferences接口和SharedPreferences的一个内部接口SharedPreferences.Editor,这两个接口在android.content包中。

调用Context.getSharedPreferences(String name,int mode)方法得到SharedPreferences接口。该方法的第一个参数是文件名称,第二个参数是操作模式。操作模式有三种:MODE_PRIVATE(私有)、MODE_WORLD_READABLE(可读)、MODE_WORLD_WRITEABLE(可写)。

SharedPreferences提供了获得数据的方法,如getString(String key,String defValue)、getInt(String key,int defValue)等。调用SharedPreferences的edit()方法返回SharedPreferences.Editor内部接口,该接口中提供了保存数据的方法,如putString(String key,String value),putInt(String key,int value)等,调用该接口的commit()方法可以将数据进行保存。SharedPreferences和SharedPreferences.Editor的常用方法如下表:

SharedPreferences常用方法

方法名称方法描述
edit()返回SharedPreferences的内部接口SharedPreferences.Editor
contains(String key)判断是否包含该键值
getAll()返回所有配置信息Map
getBoolean(String key,boolean defValue)获得一个Boolean值
getFolat(String key,float defValue)获得一个float值
getInt(String key,int defValue)获得一个int值
getLong(String key,long defValue)获得一个long值
getString(String key,String defValue)获得一个String值
SharedPreferences.Editor常用方法

方法名称方法描述
clear()清除所有值
commit()保存
getAll()返回所有配置信息Map
putBoolean(String key,boolean value)保存一个Boolean值
putFloat(String key,float value)保存一个float值
putInt(String key,int value)保存一个int值
putLong(String key,long value)保存一个long值
putString(String key,String value)保存一个String值
remove(String key)删除该键对应的值
2、Preference应用实例——保存临时短信

当我们在发短信时,突然来了一个电话。我们停止发短信,去打电话。那么,当我们打完电话回来,我们发了一半的短信内容应该还在才对。这里我们通过Preference来保存临时短信内容。

创建一个Activity,在其中放置一个EditText保存短信内容,放置一个Button用于发送短信。在onCreate()中通过getSharedPreferences()方法获得SharedPreferences接口,调用接口的getString()方法,获得保存内容,将内容设置到editText中。在onStop()方法中保存内容,使用getSharedPreferences().edit()方法获得SharedPreferences.Editor接口,调用SharedPreferences.Editor的putString()方法保存短信内容,调用commit()方法提交内容。

[java]
view plaincopyprint?

public class TestPreferencesActivity
extends Activity {
private EditText myEditText;

private Button myBtn;

private static
final String TEMP_SMS = "temp_sms";

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);
myEditText = (EditText) findViewById(R.id.EditText01);

myBtn = (Button) findViewById(R.id.Button01);
//获得SharedPreferences实例

SharedPreferences pre = getSharedPreferences(TEMP_SMS,MODE_WORLD_READABLE);

//从SharedPreferences中获得短信内容

String content = pre.getString("sms_content",
"");
//在EditText中显示短信内容

myEditText.setText(content);
}

@Override

protected void onStop() {

super.onStop();

//获得编辑器
SharedPreferences.Editor editor = getSharedPreferences(TEMP_SMS, MODE_WORLD_WRITEABLE).edit();

//将EditText中的文本内容添加到编辑器

editor.putString("sms_content", myEditText.getText().toString());

//提交编辑器内容
editor.commit();
}
}

[html]
view plaincopyprint?

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical"
>
<EditText

android:id="@+id/EditText01"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text=""
/>
<Button

android:id="@+id/Button01"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Send"
/>
</LinearLayout>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<EditText
android:id="@+id/EditText01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="" />
<Button
android:id="@+id/Button01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Send" />
</LinearLayout>

当我们编辑一些内容,退出屏幕再返回时,发现原来的内容显示出来了。其实,它是把要保存的内容作为XML文件保存到了/data/data/packge/shared_prefs下面。

二、File

我们可以将一些数据直接以文件的形式保存在设备中。例如,一些文本文件、PDF文件、音频文件和图片等。Android提供了文件读写的方法。

通过Context.openFileInput()方法获得标准Java文件输入流(FileInputStream),通过Context.openFileOutput()方法获得标准Java文件输出流(FileOutputStream)。使用Rescources.openRawResource(R.raw.my.DataFile)方法返回InputStream。

下面通过实例演示File读写文件。创建一个Activity,在其中放置两个EditText和两个Button。第一个EditText和Button将EditText的内容写到文件名为temp.txt的文件中。第二个EditText和Button将内容从temp.txt文件中读出来显示。文件被默认保存在/data/data/package/files下面。

[java]
view plaincopyprint?

public class TestFileActivity
extends Activity {
//文件名称字符串常量
private static
final String FILE_NAME = "temp.txt";

private EditText etWrite,etRead;

private Button btnWrite,btnRead;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);
etWrite = (EditText) findViewById(R.id.fileEditTextwrite);

etRead = (EditText) findViewById(R.id.fileEditTextread);

btnWrite = (Button) findViewById(R.id.fileButtonwrite);

btnRead = (Button) findViewById(R.id.fileButtonread);
//写内容
btnWrite.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View arg0) {

write(etWrite.getText().toString());

}
});
//读内容
btnRead.setOnClickListener(new OnClickListener() {

@Override
public
void onClick(View v) {
etRead.setText(read());
}
});
}
//写方法
private void write(String content){

try {
//实例化文件输出流

FileOutputStream fos = openFileOutput(FILE_NAME, MODE_APPEND);

//写内容

fos.write(content.getBytes());
//关闭文件流

fos.close();
} catch (Exception e) {

e.printStackTrace();
}
}
//读方法
private String read(){
try {
//实例化文件输入流对象
FileInputStream fis = openFileInput(FILE_NAME);

//定义缓存数组
byte[] buffer =
new byte[fis.available()];

//读到缓冲区
fis.read(buffer);
return new String(buffer);

} catch (Exception e) {

e.printStackTrace();
}
return null;

}
}

[html]
view plaincopyprint?

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical"
>
<EditText

android:id="@+id/fileEditTextwrite"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text=""
/>
<Button

android:id="@+id/fileButtonwrite"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Write"
/>
<EditText

android:id="@+id/fileEditTextread"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text=""
/>
<Button

android:id="@+id/fileButtonread"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Read"
/>
</LinearLayout>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<EditText
android:id="@+id/fileEditTextwrite"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="" />
<Button
android:id="@+id/fileButtonwrite"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Write" />
<EditText
android:id="@+id/fileEditTextread"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="" />
<Button
android:id="@+id/fileButtonread"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Read" />
</LinearLayout>

三、SQLite

Android通过SQLite数据库引擎来实现结构化数据存储。SQLite是一个嵌入式数据库引擎,针对内存等资源有限的设备(如手机、PDA、MP3)提供的一种高效的数据库引擎。

SQLIte数据库不像其他数据库(如Oracle),它没有服务器进程。所有的内容包含在同一个单文件中。该文件是跨平台的,可以自由复制。基于其自身的先天优势,SQLite在嵌入式领域得到了广泛应用。Android也没有重复发明“轮子”,而是直接使用了SQLite数据库。

1、SQLiteDatabase

Android提供了创建和使用SQLite数据库的API。SQLiteDatabase代表一个数据库对象,提供了操作数据库的一些方法,另外还有一个SQLiteOpenHelper工具类提供了更简洁的功能。在Android的SDK目录下有个sqlite3工具,我们可以使用它来创建数据库、创建表和执行一些SQL语句。

SQLiteDatabase常用方法

方法名称方法描述
openOrCreateDatabase(String path,

SQLiteDatabase.CursorFactory factory)

打开或创建数据库
insert(Sting table,String nullColumnHack,ContentValues values)添加一条记录
delete(String table,String whereClause,String[] whereArgs)删除一条记录
query(String table,String[] columns,String selection,String[] selectionArgs,

String groupBy,String having,String orderBy)

查询记录
update(String table,ContentValues values,String whereClause,String[] whereArgs)修改记录
execSQL(String sql)执行一条SQL语句
close()关闭数据库
1)、打开或者创建数据库

可以使用SQLiteDatabase的静态方法openOrCreateDatabase(String path,SQLiteDatabase.CursorFactory factory)打开或创建一个数据库,该方法的第一个参数是数据库创建路径,注意这个路径一定是数据库全路径。例如:/data/data/package/database/dbname.db。第二个参数是指定返回一个Cursor子类的工厂,如果没有指定(null)则使用默认工厂。

[java]
view plaincopyprint?

SQLiteDatabase.openOrCreateDatabase("/data/data/mx.android.ch09/database/temp.db",
null);

[java]
view plaincopyprint?

public void createTable(SQLiteDatabase db){

//创建SQL语句
String sql = "create table UserTbl(_id integer primary key autoincrement,username text,password text)";

//执行SQL语句
db.execSQL(sql);
}

public void createTable(SQLiteDatabase db){
//创建SQL语句
String sql = "create table UserTbl(_id integer primary key autoincrement,username text,password text)";
//执行SQL语句
db.execSQL(sql);
}

3)、插入数据

有两种方法:一种是调用SQLiteDatabase的insert(String table,String nullColumnHack,ContentValues values)方法,该方法的第一个参数是表名称,第二个参数的空列的默认值,第三个参数是ContentValues类型的一个封装了列名称和列值的Map;另一种方法是编写插入数据的SQL语句、直接调用SQLiteDatabase的execSQL()方法来执行。

[java]
view plaincopyprint?

public void insert1(SQLiteDatabase db){

String sql = "insert into UserTbl(username,password) values ('mx','123')";

db.execSQL(sql);
}

[java]
view plaincopyprint?

public void insert2(SQLiteDatabase db){

//实例化常量值
ContentValues cv = new ContentValues();

cv.put("username","mx");

cv.put("password",
"123");
db.insert("UserTbl",null, cv);

}

public void insert2(SQLiteDatabase db){
//实例化常量值
ContentValues cv = new ContentValues();
cv.put("username","mx");
cv.put("password", "123");
db.insert("UserTbl",null, cv);
}

4)、删除数据

有两种方法:一种的调用SQLiteDatabase的delete(String table,String whereClause,String[] whereArgs)方法,该方法的第一个参数是表名称,第二个参数是删除条件,第三个参数的删除条件值数组;另一种方法是编写删除SQL语句,调用SQLiteDatabase的execSQL()方法来执行删除。

[java]
view plaincopyprint?

public void delete1(SQLiteDatabase db){

String sql = "delete from UserTbl where _id = 1";

db.execSQL(sql);
}

[java]
view plaincopyprint?

public void delete2(SQLiteDatabase db){

String whereClause = "_id=?";

String[] whereArgs = {String.valueOf(1)};

db.delete("UserTbl", whereClause, whereArgs);

}

public void delete2(SQLiteDatabase db){
String whereClause = "_id=?";
String[] whereArgs = {String.valueOf(1)};
db.delete("UserTbl", whereClause, whereArgs);
}

5)、查询数据

下面看一个查询方法。

[java]
view plaincopyprint?

public Cursor query(String table,String[] columns,String selection,String[] selectionArgs,

String groupBy,String having,String orderBy,String limit)。

[java]
view plaincopyprint?

public void query(SQLiteDatabase db){

//查询获得游标
Cursor c = db.query("UserTbl",
null, null,
null, null,
null, null);

//判断游标是否为空
if(c.moveToFirst()){

//遍历游标
for (int i =
0; i < c.getCount(); i++) {
c.move(i);
//获得Id

int id = c.getInt(0);

//获得用户名

String username = c.getString(1);

//获得密码

String passwrod = c.getString(2);

//输出用户信息

System.out.println(id + ":" + username +
":" + passwrod);
}
}
}

public void query(SQLiteDatabase db){
//查询获得游标
Cursor c = db.query("UserTbl", null, null, null, null, null, null);
//判断游标是否为空
if(c.moveToFirst()){
//遍历游标
for (int i = 0; i < c.getCount(); i++) {
c.move(i);
//获得Id
int id = c.getInt(0);
//获得用户名
String username = c.getString(1);
//获得密码
String passwrod = c.getString(2);
//输出用户信息
System.out.println(id + ":" + username + ":" + passwrod);
}
}
}

6)、修改数据

有两种方式:一种是调用SQLiteDatabase的update(String table,ContentValues values,String whereClause,String[] whereArgs)方法。该方法的第一个参数是表名称,第二个参数是更新列ContentValues类型的键-值对(Map),第三个参数是更新条件(where子句),第四个参数是更新条件的值数组。二是编写更新的SQL语句,调用SQLiteDatabase的execSQL执行更新。

[java]
view plaincopyprint?

public void update1(SQLiteDatabase db){

String sql = "update UserTbl set password = 321 where _id = 1";

db.execSQL(sql);
}

public void update2(SQLiteDatabase db){

ContentValues values = new ContentValues();

values.put("password", "321");

String whereClause = "_id=?";

String[] whereArgs = {String.valueOf(1)};

db.update("UserTbl", values, whereClause, whereArgs);

}

[java]
view plaincopyprint?

public class TestSQLiteActivity
extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.sqlite);
//实例化数据库帮助类
MyDBHelper helper = new MyDBHelper(this);

//插入
helper.insert();
//查询
helper.query();
}

//数据库帮助类
class MyDBHelper
extends SQLiteOpenHelper{
//创建SQL语句
private static
final String CREATE_TABLE_SQL =
"create table TempTb1(_id integer,name text)";

//SQLiteDatabase实例
private SQLiteDatabase db;

//构造方法
public MyDBHelper(Context c) {

super(c, "test.db",
null, 2);

}
@Override
public void onCreate(SQLiteDatabase db) {

//创建表
db.execSQL(CREATE_TABLE_SQL);
}
@Override

public void onUpgrade(SQLiteDatabase db,
int oldVersion, int newVersion) {

}
//插入方法
private void insert(){

//插入SQL语句

String sql = "insert into TempTb1(_id,name) values(1,'mx')";

//执行插入

getWritableDatabase().execSQL(sql);
}
//查询方法
private void query(){

//获得查询游标
Cursor c = getWritableDatabase().query("TempTb1",
null, null,
null, null,
null, null);

//判断游标是否为空
if(c.moveToFirst()){

//遍历游标
for (int i =
0; i < c.getCount(); i++) {
c.move(i);
int id = c.getInt(0);

String name = c.getString(1);

System.out.println(id +
":" + name);
}
}
}
}
}

public class TestSQLiteActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sqlite);
//实例化数据库帮助类
MyDBHelper helper = new MyDBHelper(this);
//插入
helper.insert();
//查询
helper.query();
}

//数据库帮助类
class MyDBHelper extends SQLiteOpenHelper{
//创建SQL语句
private static final String CREATE_TABLE_SQL = "create table TempTb1(_id integer,name text)";
//SQLiteDatabase实例
private SQLiteDatabase db;
//构造方法
public MyDBHelper(Context c) {
super(c, "test.db", null, 2);
}
@Override
public void onCreate(SQLiteDatabase db) {
//创建表
db.execSQL(CREATE_TABLE_SQL);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}
//插入方法
private void insert(){
//插入SQL语句
String sql = "insert into TempTb1(_id,name) values(1,'mx')";
//执行插入
getWritableDatabase().execSQL(sql);
}
//查询方法
private void query(){
//获得查询游标
Cursor c = getWritableDatabase().query("TempTb1", null, null, null, null, null, null);
//判断游标是否为空
if(c.moveToFirst()){
//遍历游标
for (int i = 0; i < c.getCount(); i++) {
c.move(i);
int id = c.getInt(0);
String name = c.getString(1);
System.out.println(id + ":" + name);
}
}
}
}
}

3、SQLite应用实例——收藏管理

通过使用SQLite对自己比较喜欢的网站进行收藏管理。收藏信息包括编号、网站名称、URL和网站内容描述,可以实现的功能有添加、删除和浏览等。

1)、创建操作数据库的工具类DBHelper,该类继承SQLiteOpenHelper。覆盖onCreate()和onUpgrade()方法,并添加inisert()、del()、query()方法,分别用来添加、删除和查询数据。

[java]
view plaincopyprint?

public class DBHelper
extends SQLiteOpenHelper {
//数据库名称
private static
final String DB_NAME = "coll.db";

//表名称
private static
final String TBL_NAME = "CollTbl";

//创建表SQL语句
private static
final String CREATE_TBL = "create table CollTbl(_id integer primary key " +

"autoincrement,name text,url text,desc text)";

//SQLiteDatabase实例

private SQLiteDatabase db;

//构造方法
public DBHelper(Context c) {

super(c, DB_NAME,
null, 2);

}
//创建表
@Override
public void onCreate(SQLiteDatabase db) {

this.db = db;
db.execSQL(CREATE_TBL);

}
//插入方法
public void insert(ContentValues values){

//获得SQLiteDatabase实例

SQLiteDatabase db = getWritableDatabase();

//插入
db.insert(TBL_NAME, null, values);

db.close();
}
//查询方法
public Cursor query(){

//获得SQLiteDatabase实例

SQLiteDatabase db = getWritableDatabase();

//查询获得Cursor
Cursor c = db.query(TBL_NAME,
null, null, null,
null, null,
null);
return c;
}
//删除方法
public void delete(int id){

if(db == null)

db = getWritableDatabase();
db.delete(TBL_NAME, "_id=?",
new String[]{String.valueOf(id)});
}
//关闭数据库
public void close(){

if(db != null)

db.close();
}
@Override

public void onUpgrade(SQLiteDatabase db,
int oldVersion, int newVersion) {

}
}

[html]
view plaincopyprint?

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"
android:layout_height="fill_parent"

android:orientation="vertical"
android:layout_gravity="center_vertical"
>

<TextView

android:text="网站名称"

android:id="@+id/s_TextView01"

android:layout_width="wrap_content"

android:layout_height="wrap_content"
/>

<EditText

android:text=""

android:id="@+id/s_EditTextName"

android:layout_width="fill_parent"

android:layout_height="wrap_content"
/>

<TextView

android:text="URL"

android:id="@+id/s_TextView02"

android:layout_width="wrap_content"

android:layout_height="wrap_content"
/>

<EditText

android:text=""

android:id="@+id/s_EditTextURL"

android:layout_width="fill_parent"

android:layout_height="wrap_content"
/>

<TextView

android:text="网站描述"

android:id="@+id/s_TextView03"

android:layout_width="wrap_content"

android:layout_height="wrap_content"
/>

<EditText

android:text=""

android:id="@+id/s_EditTextDesc"

android:layout_width="fill_parent"

android:layout_height="wrap_content"
/>

<Button

android:text="添加"

android:id="@+id/s_ButtonAdd"

android:layout_width="wrap_content"

android:layout_height="wrap_content"
/>

</LinearLayout>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:orientation="vertical" android:layout_gravity="center_vertical" >

<TextView
android:text="网站名称"
android:id="@+id/s_TextView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

<EditText
android:text=""
android:id="@+id/s_EditTextName"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />

<TextView
android:text="URL"
android:id="@+id/s_TextView02"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

<EditText
android:text=""
android:id="@+id/s_EditTextURL"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />

<TextView
android:text="网站描述"
android:id="@+id/s_TextView03"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

<EditText
android:text=""
android:id="@+id/s_EditTextDesc"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />

<Button
android:text="添加"
android:id="@+id/s_ButtonAdd"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

</LinearLayout>

3)、创建AddActivity,声明用到的组件类EditText和Button,在onCreate()方法中进行初始化,响应Button的单击事件方法,该方法从编辑框中获得数据项,封装到ContentValues对象中,调用DBHelper进行保存,之后跳转到显示收藏记录QueryActivity界面。

[java]
view plaincopyprint?

public class AddActivity
extends Activity {
//声明EditText实例
private EditText et1,et2,et3;

//声明Button实例
private Button b1;

@Override
protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.add);
this.setTitle("添加收藏信息");

et1 = (EditText) findViewById(R.id.s_EditTextName);

et2 = (EditText) findViewById(R.id.s_EditTextURL);
et3 = (EditText) findViewById(R.id.s_EditTextDesc);

b1 = (Button) findViewById(R.id.s_ButtonAdd);
b1.setOnClickListener(new OnClickListener() {

@Override
public
void onClick(View arg0) {
String name = et1.getText().toString();
String url = et2.getText().toString();

String desc = et3.getText().toString();
//内容值实例

ContentValues values = new ContentValues();

values.put("name", name);

values.put("url", url);

values.put("desc", desc);

//实例化数据库帮助类

DBHelper helper = new DBHelper(getApplicationContext());

//插入数据
helper.insert(values);
//实例化Intent

Intent intent = new Intent(AddActivity.this,QueryActivity.class);

startActivity(intent);
}
});
}
}

[html]
view plaincopyprint?

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"
android:layout_height="fill_parent"

android:orientation="horizontal"
android:layout_gravity="center_vertical"
>

<TextView

android:id="@+id/r_text0"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:paddingRight="10px"
/>

<TextView

android:id="@+id/r_text1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:paddingRight="10px"
/>

<TextView

android:id="@+id/r_text2"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:paddingRight="10px"
/>

<TextView

android:id="@+id/r_text3"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:paddingLeft="10px"
/>

</LinearLayout>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:orientation="horizontal" android:layout_gravity="center_vertical" >

<TextView
android:id="@+id/r_text0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingRight="10px" />

<TextView
android:id="@+id/r_text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingRight="10px" />

<TextView
android:id="@+id/r_text2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingRight="10px" />

<TextView
android:id="@+id/r_text3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="10px" />

</LinearLayout>


[java]
view plaincopyprint?

public class QueryActivity
extends ListActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.row);
this.setTitle("浏览收藏信息");

//实例化数据库帮助类

final DBHelper helper =
new DBHelper(this);

//查询获得游标

Cursor c = helper.query();
//列表项数组

String[] from = {"_id","name","url","desc"};

//列表项ID

int[] to = {R.id.r_text0,R.id.r_text1,R.id.r_text2,R.id.r_text3};

//适配器
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,R.layout.row,c,from,to);

//列表视图
ListView listView = getListView();
//为列表视图添加适配器

listView.setAdapter(adapter);
//提示对话框

final AlertDialog.Builder builder =
new AlertDialog.Builder(this);

//为ListView设置单击监听器

listView.setOnItemClickListener(new OnItemClickListener() {

@Override

public void onItemClick(AdapterView<?> arg0, View arg1,
int arg2,
long arg3) {

final long temp = arg3;

builder.setMessage("真的要删除该记录吗?").setPositiveButton("是",
new DialogInterface.OnClickListener() {

@Override

public
void onClick(DialogInterface dialog,
int which) {
//删除数据

helper.delete((int)temp);

//重新查询

Cursor c = helper.query();

String[] from = {"_id","name","url","desc"};

int[] to = {R.id.r_text0,R.id.r_text1,R.id.r_text2,R.id.r_text3};

SimpleCursorAdapter adapter =
new SimpleCursorAdapter(getApplicationContext(),R.layout.row,c,from,to);

ListView listView = getListView();

listView.setAdapter(adapter);
}
}).setNegativeButton("否",
new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog,
int which) {

}
});
//创建提示对话框
AlertDialog ad = builder.create();

ad.show();
}
});
helper.close();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: