Android数据存储五种方式总结(DOC)
第五章android数据存储

android数据存储1.xml数据存储SharedPreferences存储数据:底层是用xml方式来保留,适合保留简单的数据,文件是保留在/data/data/应用程序主包/shared_prefs目录下1)取得SharedPreferences:/** SharedPreferences getSharedPreferences(String name, int mode)* 参数:* name:xml文件名字,后辍会主动加上.xml* mode:操作xml的模式,有以下几种:* 1)0 或Context.MODE_PRIVATE是默许操作,表示只有创建文件的程序对该目标可读可写* 2)Context.MODE_APPEND:表示追加数据* 3)Context.MODE_WORLD_READABLE:全局读,除创建文件的程序对该目标可读可写之外,其它程序能够对该文件进行读操作* 4)Context.MODE_WORLD_WRITEABLE:全局写,除创建文件的程序对该目标可读可写之外,其它程序能够对该文件进行写操作* 注意:关于xml简单数据存储,Context.MODE_PRIVATE和Context.MODE_APPEND成效是一样的,而后面的io文件存储成效那么不同*/SharedPreferences sp = this.getSharedPreferences("user",Context.MODE_WORLD_READABLE);2)增加或更新数据:SharedPreferences sp = this.getSharedPreferences("user",Context.MODE_WORLD_READABLE);//xml文件编辑器Editor editor = sp.edit();editor.putString("user", user);editor.putString("password", password);//需要提交editormit();3)读取数据:SharedPreferences sp = this.getSharedPreferences("user",Activity.MODE_PRIVATE);String user = sp.getString("user", "没有user变量");String password = sp.getString("password", "没有password变量");4)清空数据:SharedPreferences sp = this.getSharedPreferences("user",Context.MODE_WORLD_READABLE);//xml文件编辑器Editor editor = sp.edit();editor.clear();//需要提交editormit();PreferenceActivity:专门用来实现程序设置界面及参数存储的一个ActivityPreferenceScreen:设置页面,可嵌套形成二级设置页面,用Title参数设置题目。
Android中5种数据存储方式

Android中5种数据存储方式1概述SharedPreferences存储数据。
ContentProvider存储文件存储SQLlite存储网络存储Preference,File,DataBase这三种方式分别对应的目录是:●/data/data/Package Name/Shared_Pref●/data/data/Package Name/files●/data/data/Package Name/database关于这五种数据存储方式,根据实际情况选择最合适的,秉持最简单原则,也就是说能用简单的方式处理,就不要用复杂的方式。
比如存储几个数据或简单对象,用SharedPreference也能做到,就没必要写个ContentProvider。
●简单数据和配置信息,SharedPreference是首选;●如果SharedPreferences不够用,那么就创建一个数据库;●结构化数据,一定要创建数据库,虽然这稍显烦锁,但是好处无穷;●文件就是用来存储文件(也即非配置信息或结构化数据),如文本文件,二进制文件,PC文件,多媒体文件,下载的文件等等;●尽量不要创建文件;●如果创建文件,如果是私密文件或是重要文件,就存储在内部存储,否则放到外部存储。
2SharedPreferences存储数据SharedPreferences 可以将数据保存到应用程序的私有存储区,这些存储区中的数据只能被写入这些数据的软件读取。
它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息。
其存储位置在/data/data/<包名>/shared_prefs 目录下。
使用SharedPreferences是有些限制的:只能在同一个包内使用,不能在不同的包之间使用。
例如:登录用户的用户名与密码。
步骤如下:(1)使用Activity类的getSharedPreference 方法获得SharePreferences对象。
Android中数据存储方式

1. sharedPreferences类似于存储window下的配置文件(.ini),sharedPreferences中存储的信息都是以键值对的形式存储<?xml version='1.0' encoding='utf-8' standalone='yes' ?><map><string name="键名">键值</string><string name="username">ffppp</string></map>用sharedPreferences存储信息只能是基础数据类型 如:int/float/string/stringSet/Long/booleanSharedPreferences生成的存储文件路径:(默认保存名字为当前Activity.xml)data/data/包名/shared_prefs/Activity.xml2. 利用SharedPreferred进行数据存储步骤:向SharedPreferred中写入数据1)获得SharedPreferences.Editor对象SharedPreferences.Editor editor =getPreferences(MODE_PRIVATE).edit();2)利用editor对象的putXX方法向editor中以键值对的形式存储信息(注意:存储基本数据类型数据)editor.putString("键名", 值);editor.putString("password",password.getText().toString());3)当editor信息存储完成后,提交,此时会在对应文件夹下生产.xml文件(用此种方式生产的xml文件名默认是Activity.xml)mit();-生成.xml文件读取SharedPreferred中数据1)获得SharedPreferred对象SharedPreferences sp =getPreferences(MODE_PRIVATE);2)通过SharedPreferred的对象的getXX(“键名”,默认值)的方法可以取出存在.xml文件中的对应信息sp.getString("username", "");如果想自定义生产的xml文件名,可以在获得SharedPreferences.Editor对象时利用如下方法:SharedPreferences.Editor editor =getSharedPreferences("a",MODE_PRIVATE).edit();此时存储的文件名为a.xml对应着在读取SharedPreferred中数据时,获得SharedPreferred对象利用如下方法(a为存储文件名,0为文件操作模式)SharedPreferences sp =getSharedPreferences(“a”,0);文件的操作模式• Context.MODE_PRIVATE:默认模式,在那里创建的文件只能由应用程序调用,即为私有的,值为0。
Android数据存储(Data Storage)

Android提供几种保存持久化应用程序数据的选择。
依赖具体的需求来选择解决适合的方案,如数据应该是应用程序私有的还是共享的,以及数据所需要的存储空间等。
以下是可选择的数据存储方案:共享偏好(Shared Preferences)用键---值对的形式保存私有的原始数据。
内部存储(Internal Storage)在设备的内存上保存私有的数据。
外部存储(External Storage)在共享的外部存储器上保存公共的数据。
SQLite数据库在私有的数据库中保存结构化的数据。
网络连接(Network Connection)把数据保存在自己的互联网服务器上。
Android提供了内容提供器(content provider),能够你的私有数据公开给其他应用程序。
内容提供器是一种公开应用程序数据的读写访问权限的可选组件,这种读写访问会受到你所施加的任何限制的影响。
使用共享偏好SharedPreference类提供了一个一般性的框架,它允许用原始类型数据的键---值对的形式来保存和获取持久化的数据。
使用SharedPreference能够保存任意类型的原始类型数据:布尔型、浮点型、整数型、以及字符串。
这种数据会跨越用户的会话周期被持久化保存(即使是应用程序进程被杀死)。
有两种方法来为应用程序获取SharedPreferences对象:1.getSharedPreferences()方法---如果需要多个用名称来标识的偏好文件,就要使用这个方法,它的第一个参数要指定偏好文件的名称。
2.getPreferences()方法---如果仅需要针对Activity的一个偏好文件,就使用这个方法。
因为这个方法仅返回当前Activity的偏好文件,不需要提供偏好文件的名称。
以下是向偏好文件中写入数据的方法:1.调用edit()方法来获取一个SharedPreferences.Editor对象;2.调用诸如putBoolean()和putString()等方法来添加要保存的值;3.调用commit()方法来提交要保存的新值。
Android数据存储五种方式总结(DOC)

Android数据存储五种方式总结本文介绍Android平台进行数据存储的五大方式,分别如下:1 使用SharedPreferences存储数据2 文件存储数据3 SQLite数据库存储数据4 使用ContentProvider存储数据5 网络存储数据下面详细讲解这五种方式的特点第一种:使用SharedPreferences存储数据适用范围:保存少量的数据,且这些数据的格式非常简单:字符串型、基本类型的值。
比如应用程序的各种配置信息(如是否打开音效、是否使用震动效果、小游戏的玩家积分等),解锁口令密码等核心原理:保存基于XML文件存储的key-value键值对数据,通常用来存储一些简单的配置信息。
通过DDMS的File Explorer面板,展开文件浏览树,很明显SharedPreferences数据总是存储在/data/data/<package name>/shared_prefs目录下。
SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过SharedPreferences.edit()获取的内部接口Editor 对象实现。
SharedPreferences本身是一个接口,程序无法直接创建SharedPreferences实例,只能通过Context提供的getSharedPreferences(String name, int mode)方法来获取SharedPreferences实例,该方法中name表示要操作的xml文件名,第二个参数具体如下:Context.MODE_PRIVATE: 指定该SharedPreferences数据只能被本应用程序读、写。
Context.MODE_WORLD_READABLE: 指定该SharedPreferences数据能被其他应用程序读,但不能写。
Context.MODE_WORLD_WRITEABLE: 指定该SharedPreferences数据能被其他应用程序读,写Editor有如下主要重要方法:SharedPreferences.Editor clear():清空SharedPreferences里所有数据SharedPreferences.Editor putXxx(String key , xxx value):向SharedPreferences存入指定key对应的数据,其中xxx 可以是boolean,float,int等各种基本类型据SharedPreferences.Editor remove():删除SharedPreferences中指定key对应的数据项boolean commit():当Editor编辑完成后,使用该方法提交修改实际案例:运行界面如下这里只提供了两个按钮和一个输入文本框,布局简单,故在此不给出界面布局文件了,程序核心代码如下:class ViewOcl implements View.OnClickListener{@Overridepublic void onClick(View v) {switch(v.getId()){case R.id.btnSet://步骤1:获取输入值String code = txtCode.getText().toString().trim();//步骤2-1:创建一个SharedPreferences.Editor接口对象,lock表示要写入的XML 文件名,MODE_WORLD_WRITEABLE写操作SharedPreferences.Editor editor = getSharedPreferences("lock",MODE_WORLD_WRITEABLE).edit();//步骤2-2:将获取过来的值放入文件editor.putString("code", code);//步骤3:提交mit();Toast.makeText(getApplicationContext(),"口令设置成功",Toast.LENGTH_LONG).show();break;case R.id.btnGet://步骤1:创建一个SharedPreferences接口对象SharedPreferences read = getSharedPreferences("lock",MODE_WORLD_READABLE);//步骤2:获取文件中的值String value = read.getString("code", "");Toast.makeText(getApplicationContext(),"口令为:"+value,Toast.LENGTH_LONG).show();break;}}}读写其他应用的SharedPreferences: 步骤如下1、在创建SharedPreferences时,指定MODE_WORLD_READABLE模式,表明该SharedPreferences数据可以被其他程序读取2、创建其他应用程序对应的Context:Context pvCount = createPackageContext("com.tony.app", Context.CONTEXT_IGNORE_SECURITY);这里的com.tony.app就是其他程序的包名3、使用其他程序的Context获取对应的SharedPreferencesSharedPreferences read = pvCount.getSharedPreferences("lock", Context.MODE_WORLD_READABLE);4、如果是写入数据,使用Editor接口即可,所有其他操作均和前面一致。
数据存储方式

数据存储的几种方式:总体的来讲,数据存储方式有三种:一个是文件,一个是数据库,另一个则是网络。
其中文件和数据库可能用的稍多一些,文件用起来较为方便,程序可以自己定义格式;数据库用起稍烦锁一些,但它有它的优点,比如在海量数据时性能优越,有查询功能,可以加密,可以加锁,可以跨应用,跨平台等等;网络,则用于比较重要的事情,比如科研,勘探,航空等实时采集到的数据需要马上通过网络传输到数据处理中心进行存储并进行处理。
对于Android平台来讲,它的存储方式也不外乎这几种,按方式总体来分,也是文件,数据库和网络。
但从开发者的角度来讲它可以分为以下五种方式: 1.SharedPreferences共享偏好2.Internal Storage内部存储空间3.External Storage外部存储空间4.SQLite Database数据库5.Internet网络这几种方式各自有各自的优点和缺点,要根据不同的实际情况来选择,而无法给出统一的标准。
下面就各种方式谈谈它们的优缺点,以及最合适的使用情况:1.Shared Preferences共享偏好SharedPreferences是用来存储一些Key/Value类似的成对的基本数据类型,注意,它只能存储基本数据类型,也即int, long, boolean, String, float。
事实上它完全相当于一个HashMap,唯一不同的就是HashMap中的Value可以是任何对象,而SharedPreferences中的值只能存储基本数据类型(primitive types)。
对于它的使用方法,可以参考Android Developer Guide,这里不重复。
如此来看,最适合SharedPreferences的地方就是保存配置信息,因为很多配置信息都是Key/Value。
事实上,在Android当中SharedPreferences使用最多的地方也是用来保存配置(Settings)信息,系统中的Settings中这样,各个应用中的Settings也是这样。
Android的数据存储报告

{ 项目名称} Android的数据存储报告XXXXXXX信息工程中心嵌入式与RFID实验室版本历史目录0. 文档介绍 (4)0.1文档目的 (4)0.2文档范围 (4)0.3读者对象 (4)0.4参考文献 (4)0.5术语与缩写解释 (4)1. 系统环境 (5)2. ANDROID的数据存储 (5)2.1A NDROID的数据存储方式 (5)2.2使用S HARED P REFERENCES存储数据; (5)2.3文件存储数据 (7)2.4网络存储数据 (9)3. SQLITE数据库存储存储 (9)3.1SQ LITE的特点 (9)3.2与其相关的函数 (10)3.3对数据库进行操作的方法 (11)3.4对数据库进行操作的例子 (14)4. 使用CONTENTPROVIDER 存储数据 (18)4.1C ONTENT P ROVIDER简介 (18)4.2U RI类简介 (18)4.3U RI M ATCHER、C ONTENT U RIST和C ONTENT R ESOLVER简介 (18)4.4C ONTENT P ROVIDER示例程序 (19)5. 总结 (23)0. 文档介绍0.1 文档目的本文档主要是介绍Android的数据存储,作者希望通过本文档的介绍能使读者对Android 的数据存储有所了解,并通过详尽实例的讲解,使读者加深对数据存储的理解和运用。
0.2 文档范围本文档主要用于Android的数据存储,本文主要从以下几个方面来介绍:什么是数据的存储、数据存储的分类以及各个分类的详细介绍,还有一些简单的实例等。
0.3 读者对象本文适合于对And发有兴趣的读者,还有想要研究Android系统下数据存储的读者,文档涉及到Android系统,因此还是要求读者对其具有一些roid系统开基本概念,例如,关于JAVA API中关于数据库概念的理解和关于Android中有关数据存储等的理解等。
Android五种数据存储方式

Android五种数据存储⽅式android 五种数据存储:SharePreferences、SQLite、Contert Provider、File、⽹络存储Android系统提供了四种存储数据⽅式。
分别为:SharePreference、SQLite、Content Provider和File。
但由于Android系统中,数据基本是私有的,都是存放于”data/data”程序包名⽬录下,所以要实现数据共享,正确⽅式是使⽤Content ProviderSQLite:SQLite是⼀个轻量级的数据库,⽀持基本的SQL语法,是常被采⽤的⼀种数据存储⽅式。
Android为此数据库提供了⼀个名为SQLiteDatabase的类,封装了⼀些操作数据库的apiSharedPreference:除SQLite数据库外,另⼀种常⽤的数据存储⽅式,其本质就是⼀个xml⽂件,常⽤于存储较简单的参数设置。
File:即常说的⽂件(I/O)存储⽅法,常⽤语存储⼤数量的数据,但是缺点是更新数据将是⼀件困难的事情。
ContentProvider: Android系统中能实现所有应⽤程序共享的⼀种数据存储⽅式,由于数据通常在各应⽤间的是互相私密的,所以此存储⽅式较少使⽤,但是其⼜是必不可少的⼀种存储⽅式。
例如⾳频,视频,图⽚和通讯录,⼀般都可以采⽤此种⽅式进⾏存储。
每个Content Provider都会对外提供⼀个公共的URI(包装成Uri对象),如果应⽤程序有数据需要共享时,就需要使⽤Content Provider为这些数据定义⼀个URI,然后其他的应⽤程序就通过Content Provider传⼊这个URI来对数据进⾏操作。
URI由3个部分组成:"content://"、数据的路径、标识ID(可选)。
1)SQLite数据存储======================================================================SQLite是⼀种转为嵌⼊式设备设计的轻型数据库,其只有五种数据类型,分别为:NULL:空值INTEGER:整数REAL:浮点数TEXT:字符串BLOB:⼤数据在SQLite中,并没有专门设计BOOLEAN和DATE类型,因为BOOLEAN型可以⽤INTEGER的0和1代替true和false,⽽DATE类型则可以拥有特定格式的TEXT、REAL和INTEGER的值来代替显⽰,为了能⽅便的操作DATE类型,SQLite提供了⼀组函数,在Android系统中提供了anroid.database.sqlite包,⽤于进⾏SQLite数据库的增,删,改,查⼯作,其主要⽅法如下: beginTransaction(): 开始⼀个事务。
移动应用开发技术用户数据存储方法

移动应用开发技术用户数据存储方法移动应用开发技术的发展已经改变了人们的生活方式,让我们可以方便地使用手机来完成各种任务和获取信息。
然而,一个好的应用在背后离不开对用户数据的存储和管理。
本文将介绍一些常见的用户数据存储方法,帮助开发者们选择适合自己应用的技术方案。
一、本地数据库存储1. SQLite:SQLite是一种轻量级的关系型数据库,常用于移动应用的本地存储。
它具有快速、可移植和易于使用的特点,并且能够处理大量的数据。
开发者可以使用SQL语句进行数据的增删改查操作,灵活性较高。
2. Realm:Realm是一种跨平台的移动数据库,它在移动设备上具有高性能和低内存占用的特点。
与SQLite不同,Realm是一个对象数据库,开发者可以直接将对象存储到数据库中,而无需编写复杂的SQL语句。
二、SharedPreferencesSharedPreferences是一种基于键值对的存储方式,用于存储轻量级的用户配置数据。
它适合保存一些简单的应用设置,例如用户的偏好设置、登录状态等。
SharedPreferences存储在应用的私有目录下,只能被本应用访问。
三、云存储服务1. Firebase:Firebase是由Google提供的一种移动开发平台,其中包含了云存储和数据库服务。
开发者可以使用Firebase的实时数据库来存储和同步用户数据,实时数据库提供了实时的数据更新功能,非常适合需要多设备同步的应用场景。
2. AWS S3:AWS S3是亚马逊云存储服务提供的对象存储解决方案,可以安全地存储和检索任意数量的数据。
开发者可以使用AWS SDK来访问S3,并且可以自定义权限和存储桶策略来保护用户的数据。
四、文件存储如果应用需要存储大型文件或多媒体数据,可以考虑使用文件存储方式。
开发者可以使用Android内部的私有目录或者外部存储卡来存储用户数据。
在Android 中,存储在外部存储卡中的文件可以被其他应用访问到,需要注意数据的安全性。
Android教程之数据存储_by_hoyah

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/txt1"/> <TextView android:id="@+id/tv1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#ff0000"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/txt2"/> </LinearLayout>
Android数据存储方式有哪几种

Android数据存储⽅式有哪⼏种以下内容给⼤家介绍Android数据存储提供了五种⽅式:1、SharedPreferences2、⽂件存储3、SQLite数据库4、ContentProvider5、⽹络存储 本⽂主要介绍如何使⽤⽂件来存储数据。
Android⽂件操作⽤到的是Java.IO中的FileOutputStream和FileInputStream类。
⼀、存储⽂件 ⾸先实例化⼀个FileOutputStream。
FileOutputStream foStream = openFileOutput(fileName, MODE_PRIVATE);// fileName: 要写⼊⽂件的名称// MODE_PRIVATE: 为默认操作模式,代表该⽂件是私有数据,只能被应⽤本⾝访问,在该模式下,写⼊的内容会覆盖原⽂件的内容// MODE_APPEND: 模式会检查⽂件是否存在,存在就往⽂件追加内容,否则就创建新⽂件.// MODE_WORLD_READABLE: 表⽰当前⽂件可以被其他应⽤读取,不推荐使⽤// MODE_WORLD_WRITEABLE: 表⽰当前⽂件可以被其他应⽤写⼊,不推荐使⽤ 然后调⽤foStream.write()即可完成写⼊。
byte[] buffer = fileContent.getBytes();foStream.write(buffer);Toast.makeText(MainActivity.this, "写⼊成功",Toast.LENGTH_SHORT).show(); 最后进⾏⼀些清理⼯作,刷新写出流和关闭流。
foStream.flush();foStream.close();⼆、读取⽂件 同样的,⾸先实例化⼀个FileInputStream。
FileInputStream fiStream = openFileInput(fileName) 然后调⽤fiStream.read()即可int len = fiStream.available();byte[] buffer = new byte[len];fiStream.read(buffer) 最后,将⽂本显⽰并关闭读⽂件流etContent.setText(new String(buffer));Toast.makeText(MainActivity.this, "读取成功",Toast.LENGTH_SHORT).show();fiStream.close();三、完整代码import android.support.v.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;import java.io.FileInputStream;import java.io.FileOutputStream;public class MainActivity extends AppCompatActivity {private EditText etName;private EditText etContent;private Button btnWrite;private Button btnRead;private String fileName = "";private String fileContent = "";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);etName = (EditText)findViewById(R.id.etName);etContent = (EditText)findViewById(R.id.etContent);btnWrite = (Button)findViewById(R.id.btnWrite);btnRead = (Button)findViewById(R.id.btnRead);btnWrite.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {fileName = etName.getText().toString();fileContent = etContent.getText().toString();try {FileOutputStream foStream = openFileOutput(fileName, MODE_PRIVATE);byte[] buffer = fileContent.getBytes();foStream.write(buffer);Toast.makeText(MainActivity.this, "写⼊成功",Toast.LENGTH_SHORT).show();foStream.flush();foStream.close();}catch(Exception e){e.printStackTrace();}}});btnRead.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {fileName = etName.getText().toString();try{FileInputStream fiStream = openFileInput(fileName);int len = fiStream.available();byte[] buffer = new byte[len];fiStream.read(buffer);etContent.setText(new String(buffer));Toast.makeText(MainActivity.this, "读取成功",Toast.LENGTH_SHORT).show();fiStream.close();}catch(Exception e){e.printStackTrace();}}});}}<RelativeLayout xmlns:android="/apk/res/android"xmlns:tools="/tools" android:layout_width="match_parent"android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"><EditTextandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/etName"android:layout_alignParentTop="true"android:layout_alignParentLeft="true"android:layout_alignParentStart="true"android:layout_alignParentRight="true"android:layout_alignParentEnd="true"android:text="⽂件名" /><EditTextandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/etContent"android:layout_below="@+id/etName"android:layout_alignParentLeft="true"android:layout_alignParentStart="true"android:layout_alignParentRight="true"android:layout_alignParentEnd="true"android:text="⽂件内容" /><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="保存"android:id="@+id/btnWrite"android:layout_alignTop="@+id/btnRead"android:layout_toLeftOf="@+id/btnRead"android:layout_toStartOf="@+id/btnRead" /> <Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="读取"android:id="@+id/btnRead"android:layout_below="@+id/etContent"android:layout_alignParentRight="true"android:layout_alignParentEnd="true" /></RelativeLayout>。
android数据存储实验总结

android数据存储实验总结一、实验介绍Android数据存储实验是在Android Studio开发环境下,利用SharedPreferences,SQLite和File三种API实现Android应用程序的数据存储,实现具有添加、查询、删除等功能的Android应用程序。
实验帮助了解Android中三种数据存储:SharedPreferences、SQLite 以及File三种存储方式的实际应用。
二、实验步骤1、创建Android工程使用Android Studio创建一个新的Android工程,并命名为MyDataStorage。
2、编写布局文件编写主页面的布局文件,通过ListView展示数据,添加EditText 用于输入数据,以及添加Button用于添加数据。
3、实现SharedPreferences存储创建一个SharedPreferences对象,调用edit()方法获得一个Editor对象,用来向SharedPreferences写入数据,通过getString()方法从SharedPreferences中读取数据。
4、实现SQLite数据库存储使用SQLiteOpenHelper类创建、管理数据库,调用SQLiteDatabase对象的execSQL()方法创建表格,调用SQLiteDatabase对象的insert()方法向表格插入数据;调用SQLiteDatabase对象的query()方法查询数据,调用SQLiteDatabase 对象的delete()方法删除数据。
5、实现文件存储创建一个文件对象,打开文件,使用PrintWriter写数据,使用BufferedReader读取数据。
三、实验结果通过本次实验,我学习了三种Android数据存储的方式:SharedPreferences、SQLite和File,并使用这三种方式实现了一个Android应用程序的数据存储。
ANDROID数据存储教程

读、写文件的步骤
创建及写文件的步骤
① 调用OpenFileOutput()方法,传入文件的名称和操作的模式,
该方法将返回一个文件输出流 。
② 调用write()方法,向该文件输出流写入数据。 ③ 调用Close()方法,关闭文件输出流。
读取文件的步骤
① 调用OpenFileInput()方法,传入需要读取数据的文件名,该 方法将会返回一个文件输入流对象 。 ② 调用read()方法读取文件的内容。 ③ 调用Close()方法,关闭文件输入流。
mksdcard 2048M d:\sdcard.img
加载SD卡的命令:
emulator –avd avd_name –sdcard d:/sdcard.img
SD卡文件存取
读、写SD卡上的文件步骤如下:
1、调用Environment的getExternalStorageState()方法判断
户的设置和用户数据,这些都离不开数据的存储。Android系
统提供了以下五种主要的数据存储方式。 文件存储:以数据流的方式存储数据;用于存取一些数据 量不太大的数据,可以是手机存储器或外存储器上的数据。 SharedPreferences:以键值对的形式存储简单数据;用 于保存一些简单类型的数据,如用户配置或参数信息。 SQLite数据库:以数据库的方式存储结构化数据;用于保
存信息的文件名,不需要后缀;mode参数表示访问权限。 Mode的3个常量值:Context.MODE_PRIVATE;
Context.MODE_WORLD_READABLE; Context.MODE_WORLD_WRITEABLE
案例
该程序实现保存用户登录信息的功能,用户第一次登录时可设 置是否记录密码和是否自动登录。如果用户勾选记住密码复选框, 则下次登录时,会直接显示用户名和密码,用户只需单击登录即 可。【示例代码:codes\07\SaveLoginInfo 】
Android本地存储的几种方式

Android本地存储的几种方式•SharedPreferences•内部存储•外部存储•SQLite•网络连接下面主要来看一下前四种数据保存方式。
SharedPreferencesSharedPreferences(以下简称SP)以键值对形式进行存储,数据以xml形式存储在/data/data/项目包名/shared_prefs/xml.xml中。
一般来说,SP只能存储基本类型的数据,如:布尔类型、浮点型、整形及字符串,默认情况下,SP保存的文件是应用的私有文件,其他应用(和用户)不能访问这些文件,SP的使用方式及源码解析详见:SP不支持多进程之间通信,多进程之间使用可能会导致数据异常,替代SP的一种方式:内部存储直接在设备的内部存储中保存文件。
默认情况下,保存到内部存储的文件是应用的私有文件,其他应用(和用户)不能访问这些文件。
当用户卸载应用时,这些文件也会被移除。
String FILENAME = "hello_file.txt"; String string = "hello world!"; FileOutputStream fos = null; try { fos = openFileOutput(FILENAME, Context.MODE_PRIVATE); fos. write(string.getBytes(); fos.close(; } catch (FileNotFoundException e) { e.printSt ackTrace(; } catch (IOException e) { e.printStackTrace(; }我们在/data/data/项目包名/files/下可以看到已经成功创建了相应文件并且把数据写进去了:其他方法(都在Context类中):•getDir( 在您的内部存储空间内创建(或打开现有的)目录。
Android提供了5种方式存储数据

Android提供了5种方式存储数据--使用SharedPreferences存储数据;--文件存储数据;--SQLite数据库存储数据;--使用ContentProvider存储数据;--网络存储数据一:使用SharedPreferences存储数据首先说明SharedPreferences存储方式,它是Android提供的用来存储一些简单配置信息的一种机制,例如:登录用户的用户名与密码。
其采用了Map数据结构来存储数据,以键值的方式存储,可以简单的读取与写入,具体实例如下:void ReadSharedPreferences(){String strName,strPassword;SharedPreferences user = getSharedPreferences(“user_info”,0);strName = user.getString(“NAME”,””);strPassword = user getString(“PASSWORD”,””);}void WriteSharedPreferences(String strName,String strPassword){SharedPreferences user = getSharedPreferences(“user_info”,0);uer.edit();user.putString(“NAME”, strName);user.putString(“PASSWORD”,strPassword);mit();}数据读取与写入的方法都非常简单,只是在写入的时候有些区别:先调用edit()使其处于编辑状态,然后才能修改数据,最后使用commit()提交修改的数据。
实际上SharedPreferences是采用了XML格式将数据存储到设备中,在DDMS中的File Explorer中的/data/data/<package name>/shares_prefs下。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Android数据存储五种方式总结本文介绍Android平台进行数据存储的五大方式,分别如下:1 使用SharedPreferences存储数据2 文件存储数据3 SQLite数据库存储数据4 使用ContentProvider存储数据5 网络存储数据下面详细讲解这五种方式的特点第一种:使用SharedPreferences存储数据适用范围:保存少量的数据,且这些数据的格式非常简单:字符串型、基本类型的值。
比如应用程序的各种配置信息(如是否打开音效、是否使用震动效果、小游戏的玩家积分等),解锁口令密码等核心原理:保存基于XML文件存储的key-value键值对数据,通常用来存储一些简单的配置信息。
通过DDMS的File Explorer面板,展开文件浏览树,很明显SharedPreferences数据总是存储在/data/data/<package name>/shared_prefs目录下。
SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过SharedPreferences.edit()获取的内部接口Editor 对象实现。
SharedPreferences本身是一个接口,程序无法直接创建SharedPreferences实例,只能通过Context提供的getSharedPreferences(String name, int mode)方法来获取SharedPreferences实例,该方法中name表示要操作的xml文件名,第二个参数具体如下:Context.MODE_PRIVATE: 指定该SharedPreferences数据只能被本应用程序读、写。
Context.MODE_WORLD_READABLE: 指定该SharedPreferences数据能被其他应用程序读,但不能写。
Context.MODE_WORLD_WRITEABLE: 指定该SharedPreferences数据能被其他应用程序读,写Editor有如下主要重要方法:SharedPreferences.Editor clear():清空SharedPreferences里所有数据SharedPreferences.Editor putXxx(String key , xxx value):向SharedPreferences存入指定key对应的数据,其中xxx 可以是boolean,float,int等各种基本类型据SharedPreferences.Editor remove():删除SharedPreferences中指定key对应的数据项boolean commit():当Editor编辑完成后,使用该方法提交修改实际案例:运行界面如下这里只提供了两个按钮和一个输入文本框,布局简单,故在此不给出界面布局文件了,程序核心代码如下:class ViewOcl implements View.OnClickListener{@Overridepublic void onClick(View v) {switch(v.getId()){case R.id.btnSet://步骤1:获取输入值String code = txtCode.getText().toString().trim();//步骤2-1:创建一个SharedPreferences.Editor接口对象,lock表示要写入的XML 文件名,MODE_WORLD_WRITEABLE写操作SharedPreferences.Editor editor = getSharedPreferences("lock",MODE_WORLD_WRITEABLE).edit();//步骤2-2:将获取过来的值放入文件editor.putString("code", code);//步骤3:提交mit();Toast.makeText(getApplicationContext(),"口令设置成功",Toast.LENGTH_LONG).show();break;case R.id.btnGet://步骤1:创建一个SharedPreferences接口对象SharedPreferences read = getSharedPreferences("lock",MODE_WORLD_READABLE);//步骤2:获取文件中的值String value = read.getString("code", "");Toast.makeText(getApplicationContext(),"口令为:"+value,Toast.LENGTH_LONG).show();break;}}}读写其他应用的SharedPreferences: 步骤如下1、在创建SharedPreferences时,指定MODE_WORLD_READABLE模式,表明该SharedPreferences数据可以被其他程序读取2、创建其他应用程序对应的Context:Context pvCount = createPackageContext("com.tony.app",Context.CONTEXT_IGNORE_SECURITY);这里的com.tony.app就是其他程序的包名3、使用其他程序的Context获取对应的SharedPreferencesSharedPreferences read = pvCount.getSharedPreferences("lock", Context.MODE_WORLD_READABLE);4、如果是写入数据,使用Editor接口即可,所有其他操作均和前面一致。
SharedPreferences对象与SQLite数据库相比,免去了创建数据库,创建表,写SQL语句等诸多操作,相对而言更加方便,简洁。
但是SharedPreferences也有其自身缺陷,比如其职能存储boolean,int,float,long和String五种简单的数据类型,比如其无法进行条件查询等。
所以不论SharedPreferences的数据存储操作是如何简单,它也只能是存储方式的一种补充,而无法完全替代如SQLite数据库这样的其他数据存储方式。
第二种:文件存储数据核心原理: Context提供了两个方法来打开数据文件里的文件IO流FileInputStream openFileInput(String name); FileOutputStream(String name , int mode),这两个方法第一个参数用于指定文件名,第二个参数指定打开文件的模式。
具体有以下值可选:MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中。
可以使用Context.MODE_APPENDMODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。
MODE_WORLD_READABLE:表示当前文件可以被其他应用读取;MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。
除此之外,Context还提供了如下几个重要的方法:getDir(String name , int mode):在应用程序的数据文件夹下获取或者创建name对应的子目录File getFilesDir():获取该应用程序的数据文件夹得绝对路径String[] fileList():返回该应用数据文件夹的全部文件实际案例:界面沿用上图核心代码如下:public String read() {try {FileInputStream inStream= this.openFileInput("message.txt");byte[] buffer = new byte[1024];int hasRead = 0;StringBuilder sb= new StringBuilder();while ((hasRead = inStream.read(buffer)) != -1) {sb.append(new String(buffer, 0, hasRead));}inStream.close();return sb.toString();}catch (Exception e) {e.printStackTrace();}return null;}public void write(String msg){//步骤1:获取输入值if(msg == null) return;try {//步骤2:创建一个FileOutputStream对象,MODE_APPEND追加模式FileOutputStream fos = openFileOutput("message.txt",MODE_APPEND);//步骤3:将获取过来的值放入文件fos.write(msg.getBytes());//步骤4:关闭数据流fos.close();}catch (Exception e) {e.printStackTrace();}}openFileOutput()方法的第一参数用于指定文件名称,不能包含路径分隔符“/”,如果文件不存在,Android 会自动创建它。
创建的文件保存在/data/data/<packagename>/files目录,如:/data/data/cn.tony.app/files/message.txt,下面讲解某些特殊文件读写需要注意的地方:读写sdcard上的文件其中读写步骤按如下进行:1、调用Environment的getExternalStorageState()方法判断手机上是否插了sd卡,且应用程序具有读写SD卡的权限,如下代码将返回trueEnvironment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)2、调用Environment.getExternalStorageDirectory()方法来获取外部存储器,也就是SD卡的目录,或者使用"/mnt/sdcard/"目录3、使用IO流操作SD卡上的文件注意点:手机应该已插入SD卡,对于模拟器而言,可通过mksdcard命令来创建虚拟存储卡必须在AndroidManifest.xml上配置读写SD卡的权限<uses-permissionandroid:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/><uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>案例代码://文件写操作函数private void write(String content) {if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {//如果sdcard存在File file = new File(Environment.getExternalStorageDirectory().toString()+ File.separator+ DIR+ File.separator+ FILENAME); //定义File类对象if (!file.getParentFile().exists()) { //父文件夹不存在file.getParentFile().mkdirs(); //创建文件夹}PrintStream out= null; //打印流对象用于输出try {out= new PrintStream(new FileOutputStream(file, true)); //追加文件out.println(content);}catch (Exception e) {e.printStackTrace();}finally {if (out != null) {out.close();//关闭打印流}}}else { //SDCard不存在,使用Toast提示用户Toast.makeText(this, "保存失败,SD卡不存在!", Toast.LENGTH_LONG).show();}}//文件读操作函数private String read() {if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {//如果sdcard存在File file = new File(Environment.getExternalStorageDirectory().toString()+ File.separator+ DIR+ File.separator+ FILENAME); //定义File类对象if (!file.getParentFile().exists()) { //父文件夹不存在file.getParentFile().mkdirs(); //创建文件夹}Scanner scan= null; //扫描输入StringBuilder sb = new StringBuilder();try {scan= new Scanner(new FileInputStream(file)); //实例化Scannerwhile (scan.hasNext()) { //循环读取sb.append(scan.next() + "\n"); //设置文本}return sb.toString();}catch (Exception e) {e.printStackTrace();}finally {if (scan != null) {scan.close();//关闭打印流}}}else { //SDCard不存在,使用Toast提示用户Toast.makeText(this, "读取失败,SD卡不存在!", Toast.LENGTH_LONG).show();}return null;}第三种:SQLite存储数据SQLite是轻量级嵌入式数据库引擎,它支持SQL 语言,并且只利用很少的内存就有很好的性能。