`
crazier9527
  • 浏览: 1008486 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android 本地数据存储 API(二)(转)

阅读更多

使用 SQLite 数据库

Android 通过 SQLite 提供对本地关系数据库的支持。表中(定义在以下代码清单中)汇总了样例应用程序中使用的重要数据库类。

样例应用程序使用了一个 DBHelper 类来封装一些数据库操作(参见 清单 9)。


清单 9. DBHelper

    
package com.cenriqueortiz.tutorials.datastore;

import java.util.ArrayList;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DBHelper extends SQLiteOpenHelper {


 

为数据库版本、数据库名称和表名称定义了很多常量(参见 清单 10)。


清单 10. 初始化 DBHelper

    
    private SQLiteDatabase db;
    private static final int DATABASE_VERSION = 1;
    private static final String DB_NAME = "sample.db";
    private static final String TABLE_NAME = "friends";

    /**
     * Constructor
     * @param context the application context
     */
    public DBHelper(Context context) {
        super(context, DB_NAME, null, DATABASE_VERSION);
        db = getWritableDatabase();
    }


在准备好创建数据库时,会调用 onCreate() 方法。在该方法中,创建表(参见 清单 11)。


清单 11. 创建数据库表

    
    /**
     * Called at the time to create the DB.
     * The create DB statement
     * @param the SQLite DB
     */
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(
                "create table " + TABLE_NAME + " (_id integer primary key autoincrement, 
" + " fid text not null, name text not null) ");
    }


insert() 方法在信息导出到数据库时由 MainActivity 调用(参见 清单 12)。


清单 12. 插入一行

    
    /**
     * The Insert DB statement
     * @param id the friends id to insert
     * @param name the friend's name to insert
     */
    public void insert(String id, String name) {
        db.execSQL("INSERT INTO friends('fid', 'name') values ('"
                + id + "', '"
                + name + "')");
    }


deleteAll() 方法在清理数据库时由 MainActivity 调用。它删除表(参见 清单 13)。


清单 13. 删除数据库表

    
    /**
     * Wipe out the DB
     */
    public void clearAll() {
        db.delete(TABLE_NAME, null, null);
    }


提供了两个 SELECT ALL 方法:cursorSelectAll() 和 listSelectAll(),前者返回一个游标,后者返回一个 Friend 对象 ArrayList。这些方法在从数据库加载信息时由 MainActivity 调用(参见 清单 14)。


清单 14. 运行返回 ArrayList 的 Select All

    
    /**
     * Select All returns a cursor
     * @return the cursor for the DB selection
     */
    public Cursor cursorSelectAll() {
        Cursor cursor = this.db.query(
                TABLE_NAME, // Table Name
                new String[] { "fid", "name" }, // Columns to return
                null,       // SQL WHERE
                null,       // Selection Args
                null,       // SQL GROUP BY 
                null,       // SQL HAVING
                "name");    // SQL ORDER BY
        return cursor;
    }


listSelectAll() 方法返回 ArrayList 容器中选定的行,该容器由 MainActivity 用来将它绑定到 MainScreen ListView(参见 清单 15)。


清单 15. 运行返回游标的 Select All

    
    /**
     * Select All that returns an ArrayList
     * @return the ArrayList for the DB selection
     */
    public ArrayList<Friend> listSelectAll() {
        ArrayList<Friend> list = new ArrayList<Friend>();
        Cursor cursor = this.db.query(TABLE_NAME, new String[] { "fid", "name" }, 
null, null, null, null, "name");
        if (cursor.moveToFirst()) {
            do {
                Friend f = new Friend();
                f.id = cursor.getString(0);
                f.name = cursor.getString(1);
                list.add(f);
            } while (cursor.moveToNext());
        }
        if (cursor != null && !cursor.isClosed()) {
            cursor.close();
        }
        return list;
    }


如果检测到数据库版本更改,就会调用 onUpgrade() 方法(参见 清单 16)。


清单 16. 检测数据库版本是否更改

    
    /**
     * Invoked if a DB upgrade (version change) has been detected
     */
    @Override
    /**
     * Invoked if a DB upgrade (version change) has been detected
     */
    @Override
    public void onUpgrade(SQLiteDatabase db, 
       int oldVersion, int newVersion) {
        // Here add any steps needed due to version upgrade
        // for example, data format conversions, old tables 
        // no longer needed, etc
    }
}


整个 MainActivity 中,当您将信息导出到数据库、从数据库加载信息以及清理数据库时,都会使用 DBHelper。第一件事是在创建MainActivity 时实例化 DBHelper。在 onCreate() 时执行的其他任务包括初始化不同的屏幕视图(参见 清单 17)。


清单 17. MainActivity onCreate() 初始化数据库

    
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    appContext = this;
    setContentView(R.layout.main);
    dbHelper = new DBHelper(this);
    listView = (ListView) findViewById(R.id.friendsview);
    friendsArrayAdapter = new FriendsArrayAdapter(
       this, R.layout.rowlayout, friends);
    listView.setAdapter(friendsArrayAdapter);
    :
    :
}


清单 18 展示了如何从资产加载好友列表以及如何将之解析并插入数据库中。


清单 18. MainActivity 插入到数据库中

    
String fname = prefsGetFilename();
if (fname != null && fname.length() > 0) {
    buffer = getAsset(fname);
    // Parse the JSON file
    String friendslist = new String(buffer);
    final JSONObject json = new JSONObject(friendslist);
    JSONArray d = json.getJSONArray("data");
    int l = d.length();
    for (int i2=0; i2<l; i2++) {
        JSONObject o = d.getJSONObject(i2);
        String n = o.getString("name");
        String id = o.getString("id");
        dbHelper.insert(id, n);
    }
    // Only the original owner thread can touch its views                           
    MainActivity.this.runOnUiThread(new Runnable() {
        public void run() {
            friendsArrayAdapter.notifyDataSetChanged();
        }
    });         
}


清单 19 展示了如何执行 SELECT ALL 以及如何将数据绑定到主屏幕 ListView


清单 19. MainActivity Select All 和将数据绑定到 ListView

    
final ArrayList<Friend> dbFriends = dbHelper.listSelectAll();
if (dbFriends != null) {
    // Only the original owner thread can touch its views                           
    MainActivity.this.runOnUiThread(new Runnable() {
        public void run() {
            friendsArrayAdapter = 
            new FriendsArrayAdapter(
                MainActivity.this, R.layout.rowlayout, dbFriends);
            listView.setAdapter(friendsArrayAdapter);
            friendsArrayAdapter.notifyDataSetChanged();
        }
    });
}                           


接下来,了解一下在示例应用程序中使用 Internal Storage API。

 

感谢:http://hi.baidu.com/304580500/blog/item/d09187dbf87fbecfb7fd487b.html

分享到:
评论

相关推荐

    Android本地数据存储之文件存储读写

    在Android应用开发中,本地数据存储是至关重要的一个环节,特别是在处理用户数据或者应用程序需要持久化数据时。本文将深入探讨Android系统中的文件存储机制,包括如何读取、写入、重写和删除.txt格式的文件。理解...

    Android官方中文翻译API文档

    4. **数据存储**:Android提供了多种数据存储方式,如SharedPreferences(键值对存储)、SQLite数据库、文件系统和ContentProvider。 5. **网络编程**:涉及HttpURLConnection、OkHttp等网络库,以及Android的...

    Android本地数据存储之SQLite增删改查

    在Android应用开发中,本地数据存储是至关重要的,SQLite数据库作为一种轻量级的数据库系统,被广泛用于存储和管理应用程序中的结构化数据。本篇文章将深入探讨如何在Android中使用SQLite进行基本的增删改查操作,以...

    Android 写入数据到本地ExcelDemo

    在Android开发中,将数据写入到本地Excel文件是一个常见的需求,这通常涉及到对数据的存储和导出功能。在本教程中,我们将探讨如何在Android应用中实现这个功能,主要涉及的技术点包括使用第三方库Apache POI以及...

    Android数据储存

    一、Android数据存储方式 1. SharedPreferences:适用于存储少量的键值对数据,如用户设置。它是一种轻量级的存储方案,数据以XML格式存储在磁盘上,易于读写。 2. 文件存储:可以创建自定义格式的文件来保存数据...

    Android平板本地数据excel的导入导出

    在Android平台上,对本地数据进行Excel的导入与导出是一项常见的需求,特别是在处理表格类数据时。本篇文章将深入探讨如何在Android平板上实现这一功能,主要涉及Android应用开发、Excel处理以及数据存储的相关知识...

    Android-API大全

    11. **SQLite**:Android内置轻量级的SQLite数据库系统,用于本地数据存储。它支持SQL语句,方便进行数据操作。 12. **AsyncTask**和**Thread**:用于在后台线程执行耗时任务,避免阻塞主线程,提高应用性能。 13....

    ArcGIS for Android 本地数据和 谷歌图层

    **ArcGIS for Android 本地数据和谷歌图层详解** ArcGIS for Android 是一款强大的地理信息系统(GIS)开发框架,专为Android平台设计,允许开发者创建具有地图显示、地理数据分析和地理处理功能的应用程序。在2.0...

    android数据存储ppt课件及Demo

    在Android开发中,数据存储是不可或缺的一部分,它允许应用程序持久保存数据,以便在用户退出应用后还能恢复状态或在后续使用中访问数据。本资源"android数据存储ppt课件及Demo"提供了一个全面学习Android数据存储的...

    Android 本地文件的存储和读取

    以上是Android本地文件存储和读取的基本知识点。通过熟练掌握这些技术,开发者可以更好地处理应用中的数据持久化,提高用户体验。在实际开发中,还应结合具体需求,选择合适的数据结构和文件格式,以实现高效且安全...

    Android APIs Reference API Level1~API Level19离线版

    API Level 8(Froyo)开始支持SQLite数据库的升级,让数据存储更加灵活。API Level 10(Gingerbread)加强了对蓝牙2.1的支持,提升了设备间的数据传输效率。 API Level 11(Honeycomb)是专为平板电脑设计的版本,...

    Android官方API文档完整版2017

    这份文档覆盖了Android开发的各个方面,包括系统服务、UI框架、多媒体支持、网络通信、数据存储等。以下是基于这个文档及其内容的一些关键知识点: 1. **Android SDK**:SDK(Software Development Kit)是Android...

    安卓Android源码——安卓Android学习——数据存储.rar

    在安卓(Android)系统中,数据存储是应用开发不可或缺的一部分,它允许应用程序持久化数据,以便在用户退出或设备重启后仍然能够访问。本压缩包文件"安卓Android源码——安卓Android学习——数据存储.rar"显然是...

    Android应用数据的储存与读取_安卓源码.zip

    本教程将详细讲解Android中常见的数据存储方式,并通过提供的源码进行实例解析。 1. SharedPreferences SharedPreferences是Android中最简单的数据存储方式,常用于存储轻量级、配置类的数据,如用户偏好设置。它...

    最新Android apidemos

    3. **数据存储**:包括SQLite数据库操作、SharedPreferences设置、ContentProvider使用,以及最近的Room数据库框架。这些都是Android应用持久化数据的重要方式。 4. **网络通信**:涵盖了HTTP请求(如使用...

    Android官方API文档完整版

    SQLite是轻量级的关系型数据库,适用于本地数据存储;SharedPreferences用于存储简单的键值对;ContentProvider则用于跨应用数据共享。 5. **网络通信**: Android API提供了`HttpURLConnection`、`HttpClient`...

    AndroidAPI之数据储存[定义].pdf

    Android API提供了多种数据储存方式,以适应不同的需求和场景。 1. **Shared Preferences**:这是一种用于存储轻量级、私有数据的机制,通常用于保存用户的设置或者简单偏好。Shared Preferences是以键值对的形式...

    Android pptx转图片存入本地

    在Android平台上,将PPTX文件转换为图片并存储到本地是一种常见的需求,尤其是在处理离线数据或在没有Microsoft Office支持的环境中。本教程将详细解释如何实现这一过程,主要涉及的技术是Apache POI库,这是一个...

    android获取本地图片相册及图片

    总的来说,"android获取本地图片相册及图片"涉及的知识点包括:Android文件系统与权限管理、MediaStore API的使用、图片加载库的运用(如Glide)、多选功能的实现以及Intent的使用。开发者需要熟练掌握这些技术,...

    Android、Java、Js等API

    - `Android中文翻译组——Android中文API——android.widget合集(中).chm` 虽然主要是关于Android的,但可能包含了一些与SQLite数据库相关的API,因为Android设备上的本地数据存储常使用SQLite。 5. **Android ...

Global site tag (gtag.js) - Google Analytics