形式

Android的数据保存分为3种形式:file, SharedPreference, Database

文件

主要思想就是通过Context类中提供的openFileInput和openFileOutput方法,然后利用Java的各种流来进行读写操作。具体来讲,openFileOutput()返回FileOutputStream对象,得到了对象之后就可以通过OutputStreamWriter转换为字符流,然后通过BufferWriter写入字符。注意openFileOutput有两种模式,第一种是MODE_PRIVATE模式是默认模式,如果文件已经存在就覆盖原来的文件。第二种是MODE_APPEND模式,如果已经存在就追加内容

            out = openFileOutput("data", Context.MODE_APPEND);
writer = new BufferedWriter(new OutputStreamWriter(out));
writer.write(inputText);

文件默认保存在/data/data/<package name>/files目录下。如果要从该目录下读取:

            //auto check "/data/data/<package name>/files"
in = openFileInput("data");
reader = new BufferedReader(new InputStreamReader(in));
String line = "";
while ((line = reader.readLine()) != null) {
content.append(line);
}

SharedPreferences

SharedPreferences是用键值对来保存数据的。要使用SharedPreferences首先要获得SharedPreferences对象,方法有三种 1, Context类的getSharedPreferences()方法。SharedPreferences存放在/data/data/<package name>/shared_prefs/目录下。有两种操作模式,分别是MODE_PRIVATE和MODE_MULTIPROCESS,前一个表示只有当前的程序可以对这个文件进行读写,后一个表示多个进程可以读写。 2, Activity类的getPreferences()方法。 3, PreferenceManager类中的getDefaultSharedPreferences方法。 得到SharedPreferences对象之后就可以向SharedPreferences存储数据了,分三步:

  1. 调用SharedPreferences对象的edit方法
  2. 通过putBoolean或者putString方法向SharedPreferences添加数据 或者通过getString, getInt, getBoolean等方法可以读取数据
  3. 通过commit()方法将添加的数据提交,完成数据存储的操作

数据库

  1. 创建数据库的时候调用getReadableDatabase()或者getWritableDataBase()方法可以创建数据库,数据库文件存放在/data/data/<package name>/databases下,此时重写的onCreate()方法会得到执行。并可以通过onUpgrade()来更新数据库,比如添加新的表。接下来就可以通过CRUD操作数据库了
  2. 添加数据用insert方法,该方法有三个参数,第一个是表名,第二个是null,第三个是ContentValue对象:
                 ContentValues values = new ContentValues();
    values.put("name", "The Da Vinci Code");
    values.put("author", "Dan Brown");
    values.put("pages", 454);
    values.put("price", 16.96);
    db.insert("Book", null, values);
  3. 更新数据更新数据用update方法
                 ContentValues values = new ContentValues();
    values.put("price", 10.99);
    db.update("Book", values, "name = ?",
    new String[] { "The Da Vinci Code" });
  4. 删除数据用delete方法
     db.delete("Book", "pages > ?", new String[] { "500" });
  5. 查询数据用query方法
 SQLiteDatabase db = dbHelper.getWritableDatabase();
Cursor cursor = db.query("Book", null, null, null, null, null,
null);
if (cursor.moveToFirst()) {
do {
String name = cursor.getString(cursor
.getColumnIndex("name"));
String author = cursor.getString(cursor
.getColumnIndex("author"));
int pages = cursor.getInt(cursor
.getColumnIndex("pages"));
double price = cursor.getDouble(cursor
.getColumnIndex("price"));
Log.d("MainActivity", "book name is " + name);
Log.d("MainActivity", "book author is " + author);
Log.d("MainActivity", "book pages is " + pages);
Log.d("MainActivity", "book price is " + price);
} while (cursor.moveToNext());

Android中的数据保存的更多相关文章

  1. android中Json数据保存方式

    package com.example.savejsonproject; import java.io.File; import java.io.FileNotFoundException; impo ...

  2. 67.Android中的数据存储总结

    转载:http://mp.weixin.qq.com/s?__biz=MzIzMjE1Njg4Mw==&mid=2650117688&idx=1&sn=d6c73f9f04d0 ...

  3. Android中的数据存储

    Android中的数据存储主要分为三种基本方法: 1.利用shared preferences存储一些轻量级的键值对数据. 2.传统文件系统. 3.利用SQLite的数据库管理系统. 对SharedP ...

  4. Android菜鸟的成长笔记(14)—— Android中的状态保存探究(上)

    原文:[置顶] Android菜鸟的成长笔记(14)—— Android中的状态保存探究(上) 我们在用手机的时候可能会发现,即使应用被放到后台再返回到前台数据依然保留(比如说我们正在玩游戏,突然电话 ...

  5. Android菜鸟的成长笔记(15)—— Android中的状态保存探究(下)

    原文:Android菜鸟的成长笔记(15)-- Android中的状态保存探究(下) 在上一篇中我们简单了解关于Android中状态保存的过程和原理,这一篇中我们来看一下在系统配置改变的情况下保存数据 ...

  6. Android中的数据持久化机制

    Android中几种最简单但是却最通用的数据持久化技术:SharedPreference.实例状态Bundle和本地文件. Android的非确定性Activity和应用程序生存期使在会话间保留UI状 ...

  7. Android中的数据存储(二):文件存储 2017-05-25 08:16 35人阅读 评论(0) 收藏

    文件存储 这是本人(菜鸟)学习android数据存储时接触的有关文件存储的知识以及本人自己写的简单地demo,为初学者学习和使用文件存储提供一些帮助.. 如果有需要查看SharedPreference ...

  8. android中的数据存取-方式一:preference(配置)

    这种方式应该是用起来最简单的Android读写外部数据的方法了.他的用法基本上和J2SE(java.util.prefs.Preferences)中的用法一样,以一种简单. 透明的方式来保存一些用户个 ...

  9. 【转】android中的数据存取-方式一:preference(配置)

    这种方式应该是用起来最简单的Android读写外部数据的方法了.他的用法基本上和J2SE(java.util.prefs.Preferences)中的用法一样,以一种简单. 透明的方式来保存一些用户个 ...

随机推荐

  1. Java中List根据对象的属性值进行数据库group by功能的操作

    public class test { public static void main(String[] args) { List<Bill> list = new test().setO ...

  2. UVA Open Credit System Uva 11078

    题目大意:给长度N的A1.....An 求(Ai-Aj)MAX 枚举n^2 其实动态维护最大值就好了 #include<iostream> #include<cstdio> u ...

  3. [转载]自己编写 php 在线问卷调查程序

        <html> <head> <title>问卷调查</title> <meta http-equiv="Content-Type ...

  4. JQuery_处理元素和浏览器的窗口的尺寸

    一.jQuery width() 和 height() 方法 width() 方法设置或返回元素的宽度(不包括内边距.边框或外边距). height() 方法设置或返回元素的高度(不包括内边距.边框或 ...

  5. Linux 虚拟机重新生成配置文件无法启动

    ifconfig...没有看到eth0..然后重启网卡又报下面错误. 故障现象: service network restartShutting down loopback insterface:  ...

  6. union内嵌struct用法

      // union内嵌struct用法 // 众所周知,union为联合体,struct为结构体.下面根据实例谈谈用法   #include <stdio.h>   #include & ...

  7. 关于malloc的一些想法

    之前一段时间翻阅过一些内存分配的资料,这次终于能将其整理记录下来了. c标准库里有两个耳熟能详的函数,用于对堆空间的内存进行分配和释放,它们分别是: malloc.负责分配一个指定大小的一块内存给调用 ...

  8. mysql安装innodb插件

    可以用 show engines;或者show plugins;来查看mysql> show plugins;+------------+--------+----------------+-- ...

  9. 关于codeblock中一些常用的快捷键(搬运)

    关于codeblock中一些常用的快捷键(搬运) codeblock作为一个常用的C/C++编译器,是我最常用的一款编译器,但也因为常用,所以有时为了更加快速的操作难免会用到一些快捷键,但是因为我本身 ...

  10. python——线程与多线程进阶

    之前我们已经学会如何在代码块中创建新的线程去执行我们要同步执行的多个任务,但是线程的世界远不止如此.接下来,我们要介绍的是整个threading模块.threading基于Java的线程模型设计.锁( ...