`
crazier9527
  • 浏览: 1013730 次
  • 性别: 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本地数据存储中文最新版本

    本文档主要讲述的是Android 本地数据存储;对于需要跨应用程序执行期间或生命期而维护重要信息的应用程序来说,能够在移动设备上本地存储数据是一种非常关键的功能。作为一名开发人员,您经常需要存储诸如用户首选项...

    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的使用。开发者需要熟练掌握这些技术,...

Global site tag (gtag.js) - Google Analytics