geekband android #5 第五周分享(数据持久化技术)

(由自己的新浪博客转移,原文作于:2016.4.4)


1.数据持久化技术

    数据持久化就是指将那些内存中的瞬时数据保存到储存设备中,保证即使在手机或电脑关机情况下,这些数据仍然不会丢失。(保存在内存中的数据是处于瞬时状态的,而保存在储存设备中的数据是处于持久状态的。)

    Android系统中主要提供三种方式用于简单地实现数据持久化功能:a.文件存储。b.SharedPreference存储。c.数据库存储。



2.文件存储

    Android中最基本的一种数据存储方式,它不对存储的内容进行任何的格式化处理,所有数据都是原封不动地保存到文档中,因而它比较适合用于储存一些简单的文本数据或二进制数据。

    Contect类中提供了一个openFileOutput()方法,可以用于将数据储存到指定的文件中。这个方法接受两个参数,第一个参数是文件名,在创建的时候使用的就是这个名称(不能包含路径);第二个参数是文件的操作模式,主要有两种模式可选,MODE_PRIVATE和MODE_APPEND,前者为默认模式,当指定为同样文件名的时候,会进行覆写;后者则表示如果该文件已经存在就在往文件里面追加内容,不存在就创建。

openFileOutput()方法返回的值是一个FileOutputStream对象,得到了这个对象之后就可以使用Java流的方式将数据写入到文件中。

储存:

public class  MainActivity extends Activity {
private EditText edit;


@Override
protected void onCreated(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 


edit = (EditText) findViewById(R.id.edit); 
}


@Override
protected void onDestroy() {
super.onDestroy(); 
String inputText = edit.getText().toString(); 
save(inputText); 
}


public void save(String inputText) {
FileOutputStream out = null; 
BufferWriter writer = null; 
try
{
out = openFileOutput("data", Context.MODE_PRIVATE); 
write = new BufferedWriter(new OutputStreamWriter(out)); 
writer.write(inputText);
}
catch (IOException e)
{
e.printStackTrace(); 
}finally{
try
{
if(writer != null){
writer.close(); 
}
}
catch (IOException e)
{
e.printStackTrace(); 
}
}
}
}

读取:

与储存操作类似。Context类中还提供了一个openFileInput()方法,用于从文件中读取数据。该方法只接收一个参数,即要读取的文件名,并返回一个FileInputStream对象。得到这个对象再通过Java流的方式将数据读取出来。

public class  MainActivity extends Activity {
private EditText edit;


@Override
protected void onCreated(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 


edit = (EditText) findViewById(R.id.edit); 
String inputText = load(); 
if (!TextUtils.isEmpty(inputText)) {
edit.setText(inputText);
edit.setSelection(inputText.length());
Toast.makeText(this, "Restoring succeeded", Toast.LENGTH_SHORT).show();
}
}


public String load() {
FileInputStream in = null; 
BufferReader reader = null; 
try
{
in = openFileInput("data"); 
reader = new BufferedReader(new InputStreamReader(in)); 
String line = ""; 
while ((line = reader.readLine()) != null) {
content.append(line); 
}
}catch (IOException e) {
e.printStackTrace(); 
}finally{
if(reader != null) {
try {
reader.close(); 
}catch (IOException e) {
e.printStackTrace(); 
}
}
}
}



3.SharedPreferences

    SharedPreferences是使用键值对的方式来存储数据的。保存一条数据的时候需要给这条数据一个对应的键,这样在读取数据的时候就可以通过这个键把相应的值取出来。并且它支持多种不用数据类型的存储,存储什么数据类型读取出来的也是相应的数据类型。

使用方法:

    首先需要获取到SharedPreferences对象。Android提供了三种方法。

a.Context类中的getSharedPreferences()方法

接收2个参数,第一个参数用于指定SharedPreferences文件名(不存在则创建一个)。第二个用于指定操作模式,MODE_PRIVATE表示当前应用程序才能对该文件进行读写情况;MODE_MULTI_PRECESS用于会又多个进程对同一个SharedPreferences文件进行读写。

b.Activity类中的getPreferences()方法

遇上法相似,但只接收一个操作模式参数。

c.PreferencesManager类中的getDefaultSharedPreferences()方法

这是一个静态方法,只接收一个Context参数。

    得到了SharedPreferences对象之后就可以进行储存操作了。

    调用SharedPreferences对象的edit()方法获取一个SharedPreferences.Editor对象。

    向SharedPreferences.Editor对象中添加数据,比如添加一个布尔型数据就使用putBoolean方法,添加一个字符串则使用putString()方法。

调用commit()方法将添加的数据提交。




SharedPreferences数据读取:

    SharedPreferences对象提供了一系列的get方法,读取布尔型数据就用getBoolean(),读取字符串就用getString()方法,以此类推。这些get方法都接收两个参数,第一个参数是键,传入存储数据时使用的键就可以得到相应的值了,第二个参数是默认值,即表示当传入的键找不到对应的值时,会以什么样的默认值进行返回。


4.其他储存相关

SharedPreference其他:
   SharedPreference为后台数据,需要另开线程。和网络相关和IO操作相关的都要异步
   editor.apply( ) 
   SharedPreference还有一个监听方法。

数据存储其它:
   数据储存分:internal storage和external storage。后者需要申请外部读写的权限。
   而file就可以用来存放更为复杂的数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值