Andriod数据存储的基本知识Word文档格式.docx

上传人:b****5 文档编号:18716248 上传时间:2022-12-31 格式:DOCX 页数:19 大小:128.54KB
下载 相关 举报
Andriod数据存储的基本知识Word文档格式.docx_第1页
第1页 / 共19页
Andriod数据存储的基本知识Word文档格式.docx_第2页
第2页 / 共19页
Andriod数据存储的基本知识Word文档格式.docx_第3页
第3页 / 共19页
Andriod数据存储的基本知识Word文档格式.docx_第4页
第4页 / 共19页
Andriod数据存储的基本知识Word文档格式.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

Andriod数据存储的基本知识Word文档格式.docx

《Andriod数据存储的基本知识Word文档格式.docx》由会员分享,可在线阅读,更多相关《Andriod数据存储的基本知识Word文档格式.docx(19页珍藏版)》请在冰豆网上搜索。

Andriod数据存储的基本知识Word文档格式.docx

话,你可以使用这个方法,无需要提供识别的名称。

⏹使用SharedPreferences对象来获取数据非常简单,直接使用相应的getter方法

即可

⏹使用SharedPreferences对象来存储数据,大致有如下几步

调用edit()方法来得到SharedPreferences.Editor

调用相应的put方法值添加进去

调用commit来提交保存这些数据

使用SharedPreferences-2

⏹向SharedPreferences对象写入数据

SharedPreferencessp=getSharedPreferences("

SP"

Activity.MODE_PRIVATE);

SharedPreferences.Editoreditor=sp.edit();

editor.putString("

param1"

"

sp1"

);

editor.putInt("

param2"

222);

mit();

注意:

所有的写入操作应该在一个Editor里面,也就是不要调用多次sp.edit()方

法,每调用一次就会创建一个Editor

⏹在获得SharedPreferences对象的时候,需要指定文件创建的模式:

MODE_PRIVATE:

默认模式,文件只可以被调用该方法的应用程序访问

MODE_WORLD_READABLE:

赋予所有的应用程序都可以读取该文件

MODE_WORLD_WRITEABLE:

赋予所有的应用程序都可以写该文件

MODE_MULTI_PROCESS:

SharedPreference的装载标记,设置它,文件将会在

SharedPreference实例被装载到进程的时候检查是否被修改,主要用在一个应用

有多个进程的情况。

使用SharedPreferences-3

⏹从SharedPreferences对象读取数据

SharedPreferencessp=

T2.this.getSharedPreferences("

Stringp1=sp.getString("

"

"

intp2=sp.getInt("

0);

⏹SharedPreferences的数据以xml存储在data/data/包名/shared_prefs下面

InternalStorage-1

⏹当应用程序被安装到系统中后,其所在的包会有一个文件夹用于存放自己的数

据,只有这个应用程序才有对这个文件夹的写入权限,这个私有的文件夹位于

Android系统的/data/data/<

应用程序包名>

目录下,其他的应用程序都无法向这

个文件夹中写入数据。

⏹要读取应用自己的私有文件,就不能直接使用JavaI/O的API了,需要使用

Activity提供的方法:

openFileInput或openFileOutput。

⏹在使用openFileOutput方法的时候,需要指定打开的模式:

MODE_APPEND:

如果文件已存在就向该文件的末尾继续写入数据,而不是覆盖原

来的数据。

赋予所有的应用程序对该文件读的权限。

赋予所有的应用程序对该文件写的权限。

InternalStorage-2

⏹向应用对应的InternalStorage里面写入数据,这里以写对象来示例,如下:

FileOutputStreamfout=null;

ObjectOutputStreamos=null;

try{

fout=

HelloWorldActivity.this.openFileOutput("

MyData.txt"

Activity.MODE_PRIV

ATE);

os=newObjectOutputStream(fout);

os.writeObject(list);

}catch(Exceptionerr){err.printStackTrace();

}

finally{

try{fout.close();

}catch(IOExceptione1){e1.printStackTrace();

try{os.close();

}catch(IOExceptione){e.printStackTrace();

⏹不支持BufferedOutputStream

InternalStorage-3

⏹读取应用对应的InternalStorage里面的数据,这里以读取对象来示例,如下:

FileInputStreamfin=null;

ObjectInputStreamos=null;

fin=HelloWorldActivity.this.openFileInput("

os=newObjectInputStream(fin);

Toast.makeText(HelloWorldActivity.this,"

readfile="

+os.readObject(),

Toast.LENGTH_LONG).show();

}catch(Exceptionerr){

err.printStackTrace();

}finally{

try{fin.close();

try{os.close();

}catch(IOExceptione){e.printStackTrace();

⏹同样不支持BufferedInputStream

InternalStorage-保存Cache文件

⏹如果你希望保存一些Cache数据,你可以使用getCacheDir()来打开文件,将会

把数据存储到一个临时的Cache文件里面。

⏹当设备的内部存储空间低的时候,Android系统可能会清除这些Cache文件,以回

收存储空间,这也意味着,你不能在Cache文件里面存储需要持久化的数据。

InternalStorage-其它常用方法

⏹在Context中其他常用的方法:

getFilesDir()

得到内部存储的文件系统的绝对路径

getDir()

在内部存储中创建目录,如果存在的话就打开这个目录

deleteFile()

删除文件

fileList()

返回当前应用存储的文件列表

ExternalStorage(操作SD卡)-1

⏹Android的I/O基本上和Java的I/O是一样的,只有一点点不同的地方,比如:

需要加入sdcard的操作权限

需要判断sd卡是否存在,存在才能操作

放在sdcard的文件是公共的,而放到自己应用目录里面的文件才是私有的

⏹常用的功能

在AndroidManifest.xml添加sdcard读写操作权限

<

uses-permissionandroid:

name="

android.permission.WRITE_EXTERNAL_STORAGE"

>

/uses-permission>

在AndroidManifest.xml添加能创建和删除sdcard文件的操作权限

android.permission.MOUNT_UNMOUNT_FILESYSTEMS"

/>

判断SD卡是否插入

Environment.getExternalStorageState().equals(android.os.Enviroment.MEDIA_MOUNTED)

获得SD卡根目录

Android7及以下版本,使用:

Environment.getExternalStorageDirectory()可以获得如下路径

“/Android/data/<

package_name>

/files/”

Android8及以上版本,建议使用:

Context的getExternalFilesDir(type)方法,type表示你想要访问什么样

的子目录,比如Environment.DIRECTORY_MUSIC,如果访问根目录,就传入null。

ExternalStorage(操作SD卡)-2

⏹从SD卡上读文件,基本就是Java里面I/O的操作,这里以读对象为例:

publicObjectreadFile(StringfilePathName){

Objectret=null;

FileInputStreamfins=null;

try{

Filefile=newFile(Environment.getExternalStorageDirectory()+filePathName);

fins=newFileInputStream(file);

os=newObjectInputStream(fins);

ret=os.readObject();

}catch(Exceptionerr){err.printStackTrace();

try{fins.close();

returnret;

⏹比较遗憾的是,目前加上BufferedInputStream就出错

ExternalStorage(操作SD卡)-3

⏹向SD卡上写文件,基本就是Java里面I/O的操作,这里以写对象为例:

publicvoidwritefile(StringfilePathName,Objectobj){

FileOutputStreamfouts=null;

Filefile=newFile(Environment.getExternalStorageDirectory()+filePathName);

if(file.getParentFile().isDirectory()&

&

!

file.getParentFile().exists()){

file.getParentFile().mkdirs();

if(!

file.exists()){file.createNewFile();

}

fouts=newFileOutputStream(file);

os=newObjectOutputStream(fouts);

os.writeObject(obj);

}catch(Exceptionerr){err.printStackTrace();

try{fouts.close();

⏹如果要保存成Cache文件,可以使用Context的getExternalCacheDir方法

 

二、数据存取方式

⏹Preference

–“键-值”方式存储,以xml文件的形式保存

⏹File

–采用java.io.*库所提供I/O接口读写文件

⏹SQLite

–SQLite是轻量级的嵌入式数据库引擎

⏹ContentProvider

–用于实现不同应用程序之间的数据共享

1、Preference

⏹主要用于存储数据较少的场合,比如配置信息

⏹文件位置:

/data/data/<

包>

/shared_prefs/***.xml

⏹需要用到接口:

SharedPreferences

⏹及其内部接口:

SharedPreferences.Editor

⏹取得接口:

⏹Context.SharedPreferences(filename,mode)

⏹SharedPreferences.edit()

⏹数据类型、数据操作:

⏹int、flaot、string、boolean等

⏹putString(key,value)

⏹getString(key,defValue)

实例:

Test_of_Preference

⏹定义main.xml:

⏹一个EditText用于键入数据

⏹三个Button分别用于将数据写入xml文件、从文件获取数据并显示、清除文件中的数据

⏹定义sharedpreferences.xml:

⏹一个TextView用于显示从文件中获取的数据

textView1=(TextView)findViewById(R.id.textView1);

⏹创建接口sp1、spEditor1

privateSharedPreferencessp1;

sp1=this.getSharedPreferences("

test"

MODE_PRIVATE);

SharedPreferences.EditorspEditor1=sp1.edit();

⏹以键值<

StringKey,StringValue>

方式加入数据

spEditor1.putString("

TEXT"

et1.getText().toString());

spEmit();

⏹以StringKey为索引来获取数据

Stringstring1=sp1.getString("

textView1.setText(string1);

⏹清除数据

spEditor1.clear().commit();

运行结果:

可在FileExplorer中查找、导出文件:

data/data/<

/sharedprefs/test.xml

2、File

⏹文件可用来存放大量数据,如文本、图片、音频等

⏹默认位置:

/files/***.***

⏹java.io.*库提供I/O接口实现本地文件读写

⏹文件输入流的获取

⏹Context.openFileInput(Stringname)

⏹文件输出流的获取

⏹Context.openFileOutput(Stringname,

intmode)

⏹包内资源(res/raw/)文件的读取

⏹Resources.openRawResource(R.raw.file)

Test_of_File

⏹两个EditText、两个Button

⏹写文件writeFile(str):

privatevoidwriteFile(Stringstr){

try{

FileOutputStreamoutput=

openFileOutput(FILE_NAME,MODE_APPEND);

output.write(str.getBytes());

output.close();

}catch(Exceptione){

Log.e("

File_IO"

e.toString());

this.finish();

⏹读文件readFile():

privateStringreadFile(){

FileInputStreaminput=openFileInput(FILE_NAME);

byte[]buffer=newbyte[input.available()];

input.read(buffer);

input.close();

Stringstr=newString(buffer);

returnstr;

returnnull;

editText2.setText(readFile());

⏹运行结果:

⏹注意:

写文件时用的MODE_APPEND模式

3、SQLite

⏹轻量级嵌入式数据库引擎,面向资源有限的设备

⏹没有服务器进程

⏹所有数据存放在同一文件中

⏹跨平台,可自由复制

⏹SQLiteOpenHelper

⏹帮助类,用于管理数据库创建和版本更新

⏹onCreate(SQLiteDatabasedb)

⏹onUpgrade(db,intold_ver,intnew_ver)

⏹sqlite3:

位于<

SDK>

/tools

Test_of_SQLite

⏹DatabaseHelper继承自SQLiteOpenHelper

⏹重写了onCreate()、onUpgrade()方法

⏹实现insert、del、query、close等方法

⏹ListView显示记录,字段对应成TextView

⏹ListView的onItemClick()实现删除记录

⏹数据库文件路径:

⏹/data/data/<

/database/***.db

DatabaseHelper.java

privateSQLiteDatabasedb;

publicvoidinsert(ContentValuesvalues){

SQLiteDatabasedb=getWritableDatabase();

db.insert(TABLE_NAME,null,values);

db.close();

publicvoiddel(intid){

if(db==null)db=getWritableDatabase();

db.delete(TABLE_NAME,"

_id=?

newString[]{String.valueOf(id)});

publicvoidonCreate(SQLiteDatabasedb){

this.db=db;

db.execSQL(CREATE_TABLE);

Query_Test.java

DatabaseHelperdbHelper=newDatabaseHelper(this);

Cursorcursor=dbHelper.query();

String[]from={"

_id"

name"

url"

notes"

};

int[]to={R.id.textView1,R.id.textView2,R.id.textView3,

R.id.textView4};

SimpleCursorAdapterscadapter=newSimpleCursorAdapter

(this,R.layout.favoritelist,cursor,from,to);

ListViewlistView=getListView();

listView.setAdapter(scadapter);

AlertDialog.BuilderadBuilder=newAlertDialog.Builder(this);

listView.onItemClick{

adBuilder.setMessage("

确认删除?

.setPositiveButton("

Y"

newOnClickListener())

.setNegativeButton("

N"

newOnClickListener());

AlertDialogaleraDialog=adBuilder.create();

aleraDialog.show();

4、ContentProvider

⏹与Activity、Service、BroadcastReceiver同属Android应用程序基本组件之一

⏹用于保存和检索数据,实现了数据的跨应用共享

⏹Android中各应用均运行在自己的进程中,互相访问的ContentProvider接口统一定义在android.provider包内,涵盖了常见的数据类型如音视频、图片、联系人等

⏹实现的方法包括:

insert、delete、qurey、update等

⏹URI

–ContentProvider用以实现数据共享的对象

⏹ContentResolver

–ContentProvider的客户端接口

–客户端通过getContentResolver()获得接口

–提供与ContentPro

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1