`
landyer
  • 浏览: 141997 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Android开发中保存数据的四种方法方法

 
阅读更多

Android开发中我们会接触到四种数据存储方式,每种存储方式都各有不同;以下我分别列举了Android开发中的不同存储方式的特点

一,Preferences

Preferences 是一个较轻量级的存储数据的方法,具体使用方法:

在A中保存值:

 

SharedPreferences.Editor sharedata = getSharedPreferences("data", 0).edit();  

  sharedata.putString("name","shenrenkui");  

  sharedata.commit();

 

在B中取值:

SharedPreferences sharedata = getSharedPreferences("data", 0);  

String data = sharedata.getString("name", null);  

Log.i(TAG,"data="+data);
 

注意,Context.getSharedPreferences(String name,int type)的参数更我们在创建数据的时候的数据权限属性是一样的,存储和取值的过程这有点像HashMap但是比HashMap更具人性化,getXXX(Object key,Object defualtReturnValue),第二个参数是当你所要的key对应没有时候返回的值。这就省去了很多逻辑判断。。。。

二,Files

在 Android上面没有的File就是J2se中的纯种File了,可见功能之强大,这里就算是走马观花地严重路过了。

 

//创建文件
            file = new File(FILE_PATH , FILE_NAME);
            file.createNewFile();
           
            //打开文件file的OutputStream
            out = new FileOutputStream(file);
            String infoToWrite = "纸上得来终觉浅,绝知此事要躬行";
            //将字符串转换成byte数组写入文件
            out.write(infoToWrite.getBytes());
            //关闭文件file的OutputStream
            out.close();
           
            //打开文件file的InputStream
            in = new FileInputStream(file);
            //将文件内容全部读入到byte数组
            int length = (int)file.length();
            byte[] temp = new byte[length];
            in.read(temp, 0, length);
            //将byte数组用UTF-8编码并存入display字符串中
            display =  EncodingUtils.getString(temp,TEXT_ENCODING);
            //关闭文件file的InputStream
            in.close();
        } catch (IOException e) {
            //将出错信息打印到Logcat
            Log.e(TAG, e.toString());
            this.finish();
        }

//从资源读取

InputStream is=getResources().getRawResource(R.raw.文件名)
 

三,Databases

Android内嵌了功能比其他手机操作系统强大的关系型数据库 sqlite3,我们在大学时候学的SQL语句基本都可以使用,我们自己创建的数据可以用adb shell来操作。具体路径是/data/data/package_name/databases。如,这里演示一下进入 com.android.providers.media包下面的操作。

1,  adb shell

2,  cd /data/data/com.android.providers.media/databases

3,  ls(查看 com.android.providers.media下面的数据库)

4,  sqlite3 internal.db

5,  .help--- 看看如何操作

6,  .table列出internal数据中的表

7,  select * from albums;

 

DatabaseHelper mOpenHelper;

 private static final String DATABASE_NAME = "dbForTest.db";
 private static final int DATABASE_VERSION = 1;
 private static final String TABLE_NAME = "diary";
 private static final String TITLE = "title";
 private static final String BODY = "body";

 private static class DatabaseHelper extends SQLiteOpenHelper {
  DatabaseHelper(Context context) {
   super(context, DATABASE_NAME, null, DATABASE_VERSION);
  }

  @Override
  public void onCreate(SQLiteDatabase db) {

   String sql = "CREATE TABLE " + TABLE_NAME + " (" + TITLE
     + " text not null, " + BODY + " text not null " + ");";
   Log.i("haiyang:createDB=", sql);
   db.execSQL(sql);

  }

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

 /*
  * 重新建立数据表
  */
 private void CreateTable() {
  SQLiteDatabase db = mOpenHelper.getWritableDatabase();
  String sql = "CREATE TABLE " + TABLE_NAME + " (" + TITLE
    + " text not null, " + BODY + " text not null " + ");";
  Log.i("haiyang:createDB=", sql);

  try {
   db.execSQL("DROP TABLE IF EXISTS diary");
   db.execSQL(sql);
   setTitle(" 数据表成功重建");
  } catch (SQLException e) {
   setTitle("数据表重建错误");
  }
 }

 /*
  * 删除数据表
  */
 private void dropTable() {
  SQLiteDatabase db = mOpenHelper.getWritableDatabase();
  String sql = "drop table " + TABLE_NAME;
  try {
   db.execSQL(sql);
   setTitle("数据表成功删除:" + sql);
  } catch (SQLException e) {
   setTitle("数据表删除错误");
  }
 }

 /*
  * 插入两条数据
  */
 private void insertItem() {
  SQLiteDatabase db = mOpenHelper.getWritableDatabase();
  String sql1 = "insert into " + TABLE_NAME + " (" + TITLE + ", " + BODY
    + ") values('haiyang', 'android的发展真是迅速啊');";
  String sql2 = "insert into " + TABLE_NAME + " (" + TITLE + ", " + BODY
    + ") values('icesky', 'android的发展真是迅速啊');";
  try {
   Log.i("haiyang:sql1=", sql1);
   Log.i("haiyang:sql2=", sql2);
   db.execSQL(sql1);
   db.execSQL(sql2);
   setTitle(" 插入两条数据成功");
  } catch (SQLException e) {
   setTitle("插入两条数据失败");
  }
 }

 /*
  * 删除其中的一条数据
  */
 private void deleteItem() {
  try {
   SQLiteDatabase db = mOpenHelper.getWritableDatabase();
   db.delete(TABLE_NAME, " title = 'haiyang'", null);
   setTitle("删除title为haiyang的一条记录");
  } catch (SQLException e) {

  }

 }

 /*
  * 在屏幕的title区域显示当前数据表当中的数据的条数。
  */
 private void showItems() {

  SQLiteDatabase db = mOpenHelper.getReadableDatabase();
  String col[] = { TITLE, BODY };
  Cursor cur = db.query(TABLE_NAME, col, null, null, null, null, null);
  Integer num = cur.getCount();
  setTitle(Integer.toString(num) + " 条记录");
 }
 

四,Network

这是借助Internet来存储我们要的数据,这是CS结构的存储方式,也是点一下名了。

如何使用 Content Provider

下边是用户经常接触到的几个典型Content Provider应用:

    * Content Provider Name : Intended Data
    * Browser : Browser bookmarks, Browser history, etc.
    * CallLog : Missed calls, Call datails, etc.
    * Contacts : Contact details
    * MediaStore : Media files such as audio, Video and Images
    * Settings : Device Settings and Preferences

调用Content Provider资源的标准URI结构:

 

<standard_prefix>://<authority>/<data_path>/<id>
 例如:

1) 取得浏览器所有“书签”信息: content://browser/bookmarks
2) 取得系统通讯录中的信息: content://contacts/people (如果取得某一个特定通讯记录,在路径URI的末端指定一个ID号:content://contacts/people/5

简单的实例片段:

Uri allCalls = Uri.parse("content://call_log/calls");
Cursor c = managedQuery(allCalls, null, null, null, null);
 

 

 

 

分享到:
评论

相关推荐

    android数据存储的四种方式

    在Android开发中,数据存储是不可或缺的一部分,它使得应用程序能够保存和恢复用户的偏好设置、游戏进度、配置信息等。本文将详细介绍Android中的四种主要数据存储方式:SharedPreferences、File、SQLite数据库以及...

    Android开发的四大组件

    在Android应用开发中,四大组件是构建应用程序的基础,它们分别是Activity、Service、BroadcastReceiver和ContentProvider,还有Intent作为组件间通信的重要桥梁。下面我们将逐一详细解释这些组件。 **Activity详解...

    Android开发中使用CRC校验

    在Android应用开发中,CRC(Cyclic Redundancy Check,循环冗余校验)是一种广泛使用的错误检测方法,主要用于确保数据传输或存储的完整性。CRC校验通过计算数据的特定校验码,然后将这个校验码与接收端计算出的校验...

    Android开发之数据存储的四种方式之SharedPreferences

    Android项目开发中使用的数据存储方式有:网络存储、sqlite存储、File存储和SharedPreferences存储,四种存储方式对应的Demo别人是NetworkDemo、SqliteDemo、FileDemo和SharedPreferencesDemo,根据应用的场景选择...

    Android数据保存

    在Android开发中,数据保存是不可或缺的一部分,它涉及到应用程序如何持久化地存储用户数据或应用状态。本主题将深入探讨Android中的四种主要数据保存方法:内部文件存储、外部SD卡存储、首选项(SharedPreferences...

    Android之SharedPreferences数据保存

    总之,SharedPreferences是Android开发中处理小规模、非结构化数据的有效工具。通过掌握其使用方法,开发者可以方便地实现应用的偏好设置功能,提升用户体验。在实际项目中,结合其他数据存储方式,如SQLite数据库或...

    android开发艺术探索书中源码

    这本书深入浅出地讲解了Android开发中的各种技术难点和最佳实践,旨在帮助开发者提升技能,提高开发效率。书中涵盖了许多关键知识点,包括但不限于: 1. **Activity生命周期**:Android应用的核心组件之一,理解其...

    数据存储SharePreferences在android开发中的应用实例

    在Android开发中,数据存储是不可或缺的一部分,用于保存应用程序运行时的数据或用户设置。SharePreferences是Android提供的一种轻量级的数据存储方式,主要用于存储应用程序的简单配置数据,如用户偏好设置、应用...

    Android蓝牙开发(搜索,配对,连接,数据互传)

    在Android平台上进行蓝牙开发是一项常见的任务,特别是在物联网设备交互或者移动设备之间通信的场景中。以下是对"Android蓝牙开发(搜索,配对,连接,数据互传)"这个主题的详细解析。 首先,我们需要理解Android...

    Android 本地保存数据

    在Android开发中,本地数据存储是一项基本且至关重要的技能,特别是在构建功能丰富的应用程序时。本教程将引导您了解如何在Android设备上保存和查询本地数据,这对于新手开发者来说是一个很好的起点。 Android提供...

    Android软件开发之数据的新建 储存 读取 删除源码

    在Android软件开发中,数据管理是一项至关重要的任务。数据的新建、储存、读取和删除是应用程序生命周期中不可或缺的部分,确保应用能够正确地保存和访问用户数据。本教程由知名开发者雨松MOMO引领,旨在帮助开发者...

    android开发中常用类及方法总结

    在Android开发中,掌握常用的类和方法是提升开发效率的关键。这篇博客主要涵盖了开发者在日常工作中经常遇到的一些关键概念和工具。以下是对这些知识点的详细解释: 1. **Activity**: Android应用的核心组件,用于...

    Android开发中文教程(中文文档)

    Android开发中文教程是一份专为中文学习者设计的详尽指南,涵盖了Android应用程序开发的各个方面。这份教程旨在帮助初学者和有一定经验的开发者快速掌握Android平台的开发技能,提升其在移动应用领域的专业素养。 ...

    Android开发基础习题

    ### Android开发基础习题知识点解析 #### 一、填空题知识点解析 1. **Android系统是由** **Google** **开发的。** - **知识点解释:** Android是一款基于Linux内核的操作系统,最初由Andy Rubin开发并在2003年...

    Android应用源码之数据的储存与读取.zip

    在Android应用开发中,数据的储存与读取是不可或缺的一部分,它涉及到应用程序的状态保存、用户数据持久化以及应用间的数据共享。本资料包主要探讨了Android中如何进行数据存储,包括基本的文件存储、...

    Android 3种数据保存(SharedPreferences存储 内部文件存储 数据库存储)

    在Android应用开发中,数据保存是至关重要的,它能让应用在不同状态或重启后依然保持用户的设置和数据。本教程将详细介绍Android中的三种主要数据存储方式:SharedPreferences存储、内部文件存储以及数据库存储。 1...

    Android将数据导出为excel文件的方法

    在Android开发中,有时我们需要将应用中的数据导出到Excel文件,以便用户可以方便地查看、编辑或分享。本文将详细介绍如何在Android中实现这一功能,主要涉及的技术点包括文件操作、数据序列化以及第三方库的使用。 ...

    Android应用程序开发

    - **Eclipse with ADT Plugin**:早期Android开发的主要工具,虽然已被Android Studio取代,但在某些特定情况下仍可能被使用。 ##### 2. 安装Java Development Kit (JDK) - Android开发基于Java语言,因此需要安装...

    Android开发从零开始源码

    综上所述,这个压缩包涵盖了Android开发中的基础且关键的知识点,包括数据存储、XML解析、网络请求、Content Provider、UI控件等,是学习和提升Android开发技能的好资源。通过深入学习并实践这些内容,开发者可以...

Global site tag (gtag.js) - Google Analytics