Android中数据存储方式
- 格式:pdf
- 大小:173.71 KB
- 文档页数:4
第4章Android中的数据存取程序是数据的输入、处理、输出的过程,不管是操作系统还是应用程序,都不可避免要用到大量的数据。
由于内存容量有限,且一旦关机,内存中的信息都消失,因此,一般把需要下次使用的数据保存在磁盘(对于手机来说SD卡)中。
操作系统一般以文件的形式来保存数据,而应用程序更喜欢使用数据库来保存。
在手机中,也有许多需要保存的数据,如音频文件、视频、图片、通讯录、短信、游戏中的设置等数据。
Android作为一种手机上的操作系统,提供了以下几种数据存取方式:Preference(配置)、File(文件)、SQLite(数据库)、网络等。
另外,在Android中,各个应用程序组件之间是相互独立的,彼此的数据一般不能共享,为了实现数据的共享,Android提供Content Provider组件来实现应用程序之间的数据共享(最典型的共享就如通讯录)。
4.1 PreferencePreference提供了一种轻量级的数据存取方法,应用场合主要是数据比较少的配置信息。
它以“键-值”(是一个Map)对的方式将数据保存在一个XML配置文件中。
4.1.1 Preference简介使用Preference方式来存取数据,要用到SharedPreferences接口和SharedPreferences的一个内部接口SharedPreferences.Editor,这两个接口在android.content包中。
调用Context.getSharedPreferences( String name, int mode)方法可得到SharedPreferences接口,该方法的第一个参数是文件名称,第二个参数是操作模式。
操作模式有三种:MODE_PRIV ATE(私有)、MODE_WORLD_READABLE (可读)和MODE_WORLD_WRITEABLE(可写)。
SharedPreferences提供了获得数据的方法,如:getString、getInt等。
简述android中的5种数据存储方式。
在Android中,我们可以使用以下5种数据存储方式:
1. SharedPreferences: SharedPreferences是一种轻量级的数据存储方式,用于存储小量的键值对数据,比如应用程序的配置信息等。
2. SQLite数据库:SQLite是一个轻量级的关系型数据库,它提供了一种简单的方法来存储和检索数据。
3. 文件存储:我们可以将数据存储在Android设备的内部存储或外部存储设备中,比如SD卡等。
4. ContentProvider:ContentProvider是Android中的一个组件,它提供了一种标准的接口来访问应用程序中的数据。
5. Network Data:Android应用程序可以通过网络连接获取和存储数据,比如使用HTTP协议来下载数据,或者使用云存储服务来保存数据。
- 1 -。
android-数据存储之外部file存储(sdcard)⼀、基础概要 1、说明: 1>应⽤程序运⾏⽤到的数据⽂件可以保存到sd卡中 2>⽂件类型:任意 3>数据保存路径: 路径1:/storage/sdcard/Android/data/packageName/files 其它应⽤可以访问,应⽤卸载时删除 路径2:/storage/sdcard/xxx/ (表⽰⾃⼰创建的⽂件--xxx) 其它应⽤可以访问,应⽤卸载时不会被删除 2、相关API Environment 操作sd卡⼯具类: ---得到sd卡状态:Environment.getExternalStorageState() sd卡可读写的挂载状态值:Environment.MEDIA_MOUNTED ---得到sd卡路径:Environment.getExternalStorageDirectory() context.getExternalFilesDir(): ---得到 /mnt/sdcard/Android/data/package_name/files/xxx.txt 操作sd卡的权限: ---android.permission.WRITE_EXTERNAL_STORAGE 属于写的权限,但加上后也可读。
⼆、开发步骤(路径1)1、写数据 1>判断sd卡状态,如果是挂载的状态继续 2>获取输⼊⽂件名/内容 3>得到指定⽂件的OutputStream: .得到sd卡下的files路径 .组成完整路径 .创建FileOutputStream 4>写数据if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {String fileName="xrk";String fileContent="我不是向⽇葵";String filesPath=getExternalFilesDir(null).getAbsolutePath();String filePath=filesPath+"/"+fileName;FileOutputStream fos=new FileOutputStream(filePath);fos.write(fileContent.getBytes("utf-8"));fos.close();Toast.makeText(MainActivity.this, "保存成功", Toast.LENGTH_SHORT).show();}else{Toast.makeText(MainActivity.this, "保存是啊⽐", Toast.LENGTH_SHORT).show();}2、读数据:if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {String fileName="xrk";String filesPath=getExternalFilesDir(null).getAbsolutePath();System.out.println("iueiudshcs"+filesPath);String filePath=filesPath+"/"+fileName;FileInputStream fis=new FileInputStream(filePath);ByteArrayOutputStream baos=new ByteArrayOutputStream();byte[] buffer=new byte[1024];int len=-1;while((len=fis.read(buffer))!=-1){baos.write(buffer, 0, len);}String content=baos.toString();Toast.makeText(MainActivity.this, "读取成功"+content, Toast.LENGTH_SHORT).show(); }else{Toast.makeText(MainActivity.this, "读取失败", Toast.LENGTH_SHORT).show();}三、开发步骤(路径2) 1、写数据if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {String fileName="谢荣康.txt";String fileContent="我不是向⽇葵";//得到指定⽂件的输出流String sdPath=Environment.getExternalStorageDirectory().getAbsolutePath();File file=new File(sdPath+"/atguigu");if (!file.exists()) {file.mkdirs();//创建⽂件夹}String filePath=sdPath+"/atguigu/"+fileName;String filesPath=getExternalFilesDir(null).getAbsolutePath();System.out.println("iueiudshcs"+filesPath);FileOutputStream fos=new FileOutputStream(filePath);fos.write(fileContent.getBytes("utf-8"));fos.close();Toast.makeText(MainActivity.this, "保存成功", Toast.LENGTH_SHORT).show();}else{Toast.makeText(MainActivity.this, "保存是啊⽐", Toast.LENGTH_SHORT).show();} 2、读数据:if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {String fileName="谢荣康.txt";String sdPath=Environment.getExternalStorageDirectory().getAbsolutePath();String filePath=sdPath+"/atguigu/"+fileName;FileInputStream fis=new FileInputStream(filePath);ByteArrayOutputStream baos=new ByteArrayOutputStream();byte[] buffer=new byte[1024];int len=-1;while((len=fis.read(buffer))!=-1){baos.write(buffer, 0, len);}String content=baos.toString();fis.close();Toast.makeText(MainActivity.this, "读取成功"+content, Toast.LENGTH_SHORT).show(); }else{Toast.makeText(MainActivity.this, "读取失败", Toast.LENGTH_SHORT).show();。
移动应用开发中的数据存储与读取技巧在移动应用开发中,数据的存储与读取是非常常见的需求。
不同的应用场景需要不同的存储方式,例如数据量较小的应用可以使用 SharedPreferences,而数据量较大的应用则需要使用 SQLite 数据库或者 NoSQL 数据库。
本文将介绍在移动应用开发中常用的数据存储与读取技巧。
一、SharedPreferencesSharedPreferences 是 Android 系统中一个轻量级的数据存储方式,它适合用于存储一些简单的配置信息或者少量的用户数据。
SharedPreferences 存储数据的模式类似于键值对,其中键为字符串类型,值可以为布尔型、整型、浮点型、长整型和字符串类型。
SharedPreferences 的写入和读取操作非常简单明了,下面是一个示例代码:// 写入数据SharedPreferences.Editor editor = getSharedPreferences("data", MODE_PRIVATE).edit();editor.putString("name", "Tom");editor.putInt("age", 20);editor.apply();// 读取数据SharedPreferences sharedPreferences =getSharedPreferences("data", MODE_PRIVATE);String name = sharedPreferences.getString("name", "");int age = sharedPreferences.getInt("age", 0);二、SQLite 数据库SQLite 是一种轻量级、可嵌入的关系型数据库,它可以储存在应用程序的内部存储器中,适合储存大量复杂数据。
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的数据存储报告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 五种数据存储: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(): 开始⼀个事务。
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 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面试题及答案一、Activity 生命周期相关1. 请简述Activity的生命周期,并解释每个状态的含义。
- Activity生命周期主要包括 onCreate(), onStart(), onResume(), onPause(), onStop(), 和 onDestroy() 方法。
onCreate() 在Activity第一次创建时调用,用于初始化界面和数据。
onStart() 当Activity对用户可见时调用,表示Activity已经部分准备好与用户交互。
onResume() 当Activity准备与用户交互时调用,此时Activity处于前台。
onPause() 当Activity失去焦点,但未完全退出时调用,用于保存数据和清理资源。
onStop() 当Activity完全不再显示在屏幕上时调用,释放资源。
onDestroy() 当Activity被系统销毁时调用,用于做最后的清理工作。
2. Activity A跳转到Activity B,再按返回键,生命周期如何调用? - 当从Activity A跳转到Activity B时,Activity A的onPause()会被调用,然后是onStop(),而Activity B会依次调用onCreate(),onStart(),onResume()。
按返回键从Activity B返回到Activity A时,Activity B会依次调用onPause()和onStop(),Activity A则会依次调用onRestart(), onStart()和onResume()。
二、Intent 相关1. 请解释Intent的基本作用及其使用场景。
- Intent是Android中用于组件间通信的一种机制,它可以用于启动Activity,Service,发送广播等。
常见的使用场景包括从一个Activity启动另一个Activity,或者向Service发送数据。
AndroidStudioAndroid数据存储五种方式总结本文介绍Android平台进行数据存储的五大方式,分别如下:1 使用SharedPreferences存储数据2 文件存储数据3 SQLite数据库存储数据4 使用ContentProvider存储数据5 网络存储数据第一种:使用SharedPreferences存储数据SharedPreferencese的使用:https:///augfun/article/details/54563808 适用范围:保存少量的数据,且这些数据的格式非常简单:字符串型、基本类型的值。
比如应用程序的各种配置信息(如是否打开音效、是否使用震动效果、小游戏的玩家积分等),解锁口令密码等。
核心原理:保存基于XML文件存储的key-value键值对数据,通常用来存储一些简单的配置信息。
通过DDMS的File Explorer面板,展开文件浏览树,很明显SharedPreferences数据总是存储在/data/data//shared_prefs目录下。
SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过SharedPreferences.edit()获取的内部接口Editor对象实现。
SharedPreferences本身是一个接口,程序无法直接创建SharedPreferences实例,只能通过Context提供的getSharedPreferences(String name, int mode)方法来获取SharedPreferences实例class ViewOcl implements View.OnClickListener{undefined @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("lo ck", 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", MO DE_WORLD_READABLE);//步骤2:获取文件中的值String value = read.getString("code", "");Toast.makeText(getApplicationContext(), "口令为:"+value, Toast.LENGTH_LONG).show();break;}12345678910111213141516171819202122232425第二种:文件存储数据核心原理: Context提供了两个方法来打开数据文件里的文件IO流FileInputStream openFileInput(String name); FileOutputStream(String name , int mode),这两个方法第一个参数用于指定文件名,第二个参数指定打开文件的模式。
第14讲数据存储(1)—Preference存储数据Android中有三种持久化数据的方法:SQLite数据库、文件存储、Preference。
三种方法各有专攻,而其中Preference是以类似Map的键值对形式存储的,最适合用来保存用户个人设置之类的信息,比如是否打开音效,音量大小、界面颜色等等。
比用文件来保存方便读取。
而SQLite数据库用来保存大量的数据。
基础知识讲解:SharedPreferences与Editor简介---SharedPreferences主要用来保存类似配置信息格式的数据,它保存的数据是key-value对。
它主要负责读取应用的Preference数据。
查看SharedPreference类的源码,重要的方法有:boolean contains(String key)String getString(String key, String defValue)float getFloat(String key, float defValue)……可以返回各种基本类型getAll():获取SharedPreference中的所有的key value对Editor edit():得到一个Editor对象---Editor类SharedPreferences接口本身并没有提供写入数据的能力,而是通过SharedPreference的内部接口,即Editor对象所提供的写入方法来向SharedPreferences中写入数据,重要的方法有:Editor putString(String key, String value);Editor putInt(String key, int value);……可以写入各种基本类型boolean commit(); 当Editor编辑完成时,提交修改,类似于事务Editor remove(String key);Editor clear(); 清空所有已有的SharedPreference数据---得到SharedPreferences的实例Context(Activity类的父类)类提供的方法:preferences= this.getSharedPreferences("setting", Context.MODE_PRIVATE);第一个参数表示在手机内存中所写入的持久化文件为setting.xml,位置如下第二个参数表示权限,控制所写的配置文件是否能由其他的程序所读取或修改例:对前例所开发的记事本程序进行界面颜色的设定。
sharedpreferences 用法SharedPreferences是Android中一种轻量级的数据存储方式,用于存储少量的键值对数据。
它是基于XML文件存储的,可以用于存储应用程序的配置信息、用户偏好设置等。
SharedPreferences的使用非常简单,下面将详细介绍SharedPreferences的用法。
1. 创建SharedPreferences对象要使用SharedPreferences,首先需要获取一个SharedPreferences对象。
可以通过Context的getSharedPreferences()方法或者PreferenceManager的getDefaultSharedPreferences()方法来获取SharedPreferences对象。
- 使用getSharedPreferences()方法:javaSharedPreferences sharedPreferences =getSharedPreferences("my_preferences", Context.MODE_PRIVATE);这里的"my_preferences"是SharedPreferences的名称,Context.MODE_PRIVATE表示只有当前应用程序可以访问该SharedPreferences。
- 使用getDefaultSharedPreferences()方法:javaSharedPreferences sharedPreferences =PreferenceManager.getDefaultSharedPreferences(context);getDefaultSharedPreferences()方法会自动使用当前应用程序的包名作为SharedPreferences的名称,并且使用Context.MODE_PRIVATE模式。
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/boolean
SharedPreferences生成的存储文件路径:(默认保存名字为当前Activity.xml)
data/data/包名/shared_prefs/Activity.xml
2. 利用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。
• Context.MODE_WORLD_READABLE:允许所有其他应用
程序有读取文件的权限,值为1 。
• Context.MODE_WORLD_WRITEABLE:允许所有其他应用
程序具有写入文件的权限,值为2。
Java数据流
输出流向硬盘里写数据 output-------
参照:电脑内存
输入流从硬盘里读出数据 input------
手机内存中写入/读取数据
写入:output….
// context.getFilesDir().getAbsolutePath()获取内存绝对
路径
File file=new
File(context.getFilesDir().getAbsolutePath()+"/"+FileName); //FileOutputStream 是字节流,处理起来麻烦,
openFileoutput方法中参数不能有“/”
FileOutputStream fileoutputstream=new
FileOutputStream(file);
//OutputStreamWriter就是把字节流转换成容易处理的字符流
OutputStreamWriter osw=new
OutputStreamWriter(fileoutputstream);
//写入数据
osw.write(fileContent);
//关闭
osw.close();
读取:input…
//打开一个文件私有输入流,openFileInput方法中不能有“/”FileInputStream
fileinputstream=this.context.openFileInput(FileName);
//把字节流转换成字符流
InputStreamReader isr=new
InputStreamReader(fileinputstream);
BufferedReader br=new BufferedReader(isr);
//可变长StringBuffer存储读出数据的
StringBuffer sb=new StringBuffer();
String data="";
while((data=br.readLine())!=null){
sb.append(data); }
SDCrad上文件存储
要加上权限
获取sd卡上创建删除文件的权限
<uses-permission
android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"获得sdcard上读写数据的权限
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
写入Sd卡
//FileWriter返回字符型数据
FileWriter fw = new FileWriter(file);
fw.write(fileContent);
fw.close();
读取sd卡
File file = new File("/mnt/sdcard/" + FileName);
FileReader fr = new FileReader(file);
StringBuffer sb = new StringBuffer();
BufferedReader br = new
BufferedReader(fr);
String data = "";
while ((data = br.readLine()) != null) {
sb.append(data);
}
return sb.toString();。