Android数据存储之SharedPreferences方式

 

在Android中,可供选择的存储方式有SharedPreferences、文件存储、SQLite数据库方式、内容提供器(Content provider)和网络。

今儿个咱学SharedPreferences:

有些时候,应用程序有少量的数据需要保存,而且这些数据的格式很简单:都是普通的字符串、标量类型的值等,比如应用程序的各种配置信息、小游戏的于玩家积分等,对于这种数据,提供了SharedPreferences进行保存;可以想象它是一个小小的Cookie,它通过用键值对的方式把简单数据类型(boolean、int、float、long和String)存储在应用程序的私有目录下(data/data/包名/shared_prefs/)自己定义的xml文件中。

1、说明

它提供一种轻量级的数据存储方式,通过eidt()方法来修改里面的内容,通过Commit()方法来提交修改后的内容。

2、重要方法

public abstract boolean contains (Stringkey) :检查是否已存在该文件,其中key是xml的文件名。

edit():为preferences创建一个编辑器Editor,通过创建的Editor可以修改preferences里面的数据,但必须执行commit()方法。

getAll():返回preferences里面的多有数据。

getBoolean(String key, boolean defValue):获取Boolean型数据

getFloat(String key, float defValue):获取Float型数据

getInt(String key, int defValue):获取Int型数据

getLong(String key, long defValue):获取Long型数据

getString(String key, String defValue):获取String型数据

registerOnSharedPreferenceChangeListener(SharedPreferences.OnSharedPreferenceChangeListenerlistener):注册一个当preference发生改变时被调用的回调函数。

unregisterOnSharedPreferenceChangeListener(SharedPreferences.OnSharedPreferenceChangeListenerlistener):删除当前回调函数。

3、重要接口SharedPreferences.Editor

用于修改SharedPreferences对象的内容,所有更改都是在编辑器所做的批处理,而不是复制回原来的SharedPreferences或持久化存储,直到你调用commit(),才将持久化存储。重要方法:

clear():清除内容。

  commit():提交修改

  remove(String key):删除preference

下面通过一个简单的实例来示范如何向SharedPreferences中写入、读取数据;

布局文件很简单:

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="horizontal"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     android:gravity="center_horizontal"  
  7.     >  
  8. <Button   
  9.     android:id="@+id/write"  
  10.     android:layout_width="wrap_content"   
  11.     android:layout_height="wrap_content"   
  12.     android:text="@string/write"  
  13.     />  
  14. <Button   
  15.     android:id="@+id/read"  
  16.     android:layout_width="wrap_content"   
  17.     android:layout_height="wrap_content"   
  18.     android:text="@string/read"  
  19.     />     
  20. </LinearLayout>  


程序代码如下:       

 

  1. package org.crazyit.io;  
  2.   
  3. import java.text.SimpleDateFormat;  
  4. import java.util.Date;  
  5.   
  6. import android.app.Activity;  
  7. import android.content.SharedPreferences;  
  8. import android.os.Bundle;  
  9. import android.view.View;  
  10. import android.view.View.OnClickListener;  
  11. import android.widget.Button;  
  12. import android.widget.Toast;  
  13. public class SharedPreferencesTest extends Activity  
  14. {  
  15.     SharedPreferences preferences;  
  16.     SharedPreferences.Editor editor;  
  17.   
  18.     @Override  
  19.     public void onCreate(Bundle savedInstanceState)  
  20.     {  
  21.         super.onCreate(savedInstanceState);  
  22.         setContentView(R.layout.main);  
  23.         // 获取只能被本应用程序读、写的SharedPreferences对象   
  24.         preferences = getSharedPreferences("crazyit", MODE_WORLD_READABLE);  
  25.         editor = preferences.edit();  
  26.         Button read = (Button) findViewById(R.id.read);  
  27.         Button write = (Button) findViewById(R.id.write);  
  28.         read.setOnClickListener(new OnClickListener()  
  29.         {  
  30.             @Override  
  31.             public void onClick(View arg0)  
  32.             {  
  33.                 //读取字符串数据   
  34.                 String time = preferences.getString("time"null);  
  35.                 //读取int类型的数据   
  36.                 int randNum = preferences.getInt("random"0);  
  37.                 String result = time == null ? "您暂时还未写入数据"  
  38.                     : "写入时间为:" + time   
  39.                     + "\n上次生成的随机数为:" + randNum;  
  40.                 //使用Toast提示信息   
  41.                 Toast.makeText(SharedPreferencesTest.this ,   
  42.                     result , 5000)  
  43.                     .show();  
  44.             }  
  45.         });  
  46.         write.setOnClickListener(new OnClickListener()  
  47.         {  
  48.             @Override  
  49.             public void onClick(View arg0)  
  50.             {  
  51.                 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 "  
  52.                     + "hh:mm:ss");  
  53.                 // 存入当前时间   
  54.                 editor.putString("time", sdf.format(new Date()));  
  55.                 // 存入一个随机数   
  56.                 editor.putInt("random", (int) (Math.random() * 100));  
  57.                 // 提交所有存入的数据   
  58.                 editor.commit();  
  59.             }  
  60.         });  
  61.     }  
  62. }     
该程序就是简单的实现写入数据读取数据;

简单的界面如下图:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章