安卓系统为应用提供了系统级的配置存储方案,它就是靠SharedPreferences接口来实现的,该接口存储的所有信息都是以名值对的形式保存,但其保存的数据类型也仅限于基本数据类型,如字符串、整形、布尔型等。这些配置最后会保存在一个XML文件中,每次打开应用时,这些保存的信息就会被加载进来,我们也可以在“管理应用程序”中将这些缓存数据清除。
SharedPreferences接口的常用方法如下:
No | 方法 | 类型 | 描述 |
1 | public abstract SharedPreferences.Editor edit() | 普通 | 使其可编辑,并获得编辑器对象 |
2 | public abstract boolean contains(String key) | 普通 | 判断key是否存在 |
3 | public abstract Map<String,?>getAll() | 普通 | 获得全部数据 |
4 | public abstract boolean getBoolean(String key, boolean defValue) | 普通 | 获得boolean值,若无,则设为defValue |
5 | public abstract float getFloat(String key, float defValue) | 普通 | 获得float值,若无,则设为defValue |
6 | puclic abstract int getInt(String key, int defValue) | 普通 | 获得int值,若无,则设为defValue |
7 | public abstract long getLong(String key, long defValue) | 普通 | 获得long值,若无,则设为defValue |
8 | public abstract String getString(String key, String defValue) | 普通 | 获得Sting值,若无,则设为defValue |
SharedPreferences接口的方法getXxx()用来获取已经存储的值,而要写入新的名值对则需要获得它的编辑器接口SharedPreferes.Editor接口,即调用SharedPreferences接口的edit()方法即可获得。
SharedPreferences.Editor接口的常用方法如下:
No | 方法 | 类型 | 描述 |
1 | public abstract SharedPreferences.Editor clear() | 普通 | 清除所有数据 |
2 | public abstract boolean commit() | 普通 | 提交更新的数据 |
3 | public abstract SharedPreferences.Editor putBoolean(String key, Boolean value) | 普通 | 保存boolean型数据 |
4 | public abstract SharedPreferences.Editor putFloat(String key, float value) | 普通 | 保存float型数据 |
5 | public abstract SharedPreferences.Editor putInt(String key, int value) | 普通 | 保存int型数据 |
6 | public abstract SharedPreferences.Editor putLong(String key, long value) | 普通 | 保存long型数据 |
7 | public abstract SharedPreferences.Editor putString(String key, String value) | 普通 | 保存String型数据 |
8 | public abstract SharedPreferences.Editor remove(String key) | 普通 | 删除指定key的数据 |
由于SharedPreferences和SharedPreferences.Editor都是接口,所以要想获得他们的实例化对象,还需要Activity类的方法和常量的支持
public static final int MODE_PRIVATE, public static final int MODE_WORLD_READBALE, public static final int MODE_WORLD_WRITEBALE常量和public SharedPreferences getSharedPreferences(String name, int mode)(其中name指保存的文件名称,mode指操作的模式)。
下面以一个实例加以说明:
1 package com.wl.testsharedpreferences; 2 3 import android.os.Bundle; 4 import android.app.Activity; 5 import android.content.SharedPreferences; 6 import android.view.Menu; 7 import android.view.TextureView; 8 import android.view.View; 9 import android.view.View.OnClickListener; 10 import android.widget.Button; 11 import android.widget.TextView; 12 13 public class MainActivity extends Activity implements OnClickListener { 14 15 Button btn1,btn2; 16 SharedPreferences sp = null; 17 18 @Override 19 protected void onCreate(Bundle savedInstanceState) { 20 super.onCreate(savedInstanceState); 21 setContentView(R.layout.activity_main); 22 btn1 = (Button) findViewById(R.id.btn1); 23 btn2 = (Button) findViewById(R.id.btn2); 24 25 btn1.setOnClickListener(this); 26 btn2.setOnClickListener(this); 27 28 sp = getSharedPreferences("mysp", Activity.MODE_PRIVATE); //获得SharedPreferences实例 29 } 30 31 32 @Override 33 public void onClick(View view) { 34 // TODO Auto-generated method stub 35 TextView tv = (TextView) findViewById(R.id.tv); 36 if(view == btn1) { 37 SharedPreferences.Editor editor = sp.edit(); 38 editor.putString("author", "xiaowang"); 39 editor.putInt("age", 25); 40 editor.commit(); 41 tv.setText("Write successfully!"); 42 } else if(view == btn2) { 43 tv.setText(sp.getString("author", "xiaozhang") + "," + sp.getInt("age", 20)); 44 } 45 } 46 }
1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="fill_parent" 4 android:layout_height="fill_parent" 5 android:orientation="vertical" > 6 7 <TextView 8 android:id="@+id/tv" 9 android:layout_width="fill_parent" 10 android:layout_height="wrap_content"/> 11 12 <Button 13 android:id="@+id/btn1" 14 android:layout_width="fill_parent" 15 android:layout_height="wrap_content" 16 android:text="@string/btn1"/> //string/btn1为"写名值对" 17 18 <Button 19 android:id="@+id/btn2" 20 android:layout_width="fill_parent" 21 android:layout_height="wrap_content" 22 android:text="@string/btn2"/> //string/btn2为"读名值对" 23 24 </LinearLayout>
从以上例子可以很容易的掌握SharedPreferences的用法。
注:当我们写入名值对后,一定记得要调用commit()函数,不然所写入的并未提交,也就无从读出了。