首页 > 代码库 > Android数据的四种存储方式之SharedPreferences

Android数据的四种存储方式之SharedPreferences

  除了SQLite数据库外,SharedPreferences也是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息。其存储位置在/data/data/< >/shared_prefs目录下。SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过Editor对象实现。实现SharedPreferences存储的步骤如下:

  一、根据Context获取SharedPreferences对象

  二、利用edit()方法获取Editor对象。

  三、通过Editor对象存储key-value键值对数据。

  四、通过commit()方法提交数据。

 

下面是用SharedPreferences存储数据的一个案例:

点击开启开启WiFi,设置进度条,保存状态,下次打开此程序,将显示上次保存的状态。

核心code如下:

package com.ghsy.demo;

import android.os.Bundle;
import android.app.Activity;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.view.Menu;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;

public class MainActivity extends Activity {

	private CheckBox checkBox;
	private SeekBar seekBar;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		checkBox=(CheckBox) this.findViewById(R.id.checkBox1);
		seekBar=(SeekBar) this.findViewById(R.id.seekBar1);
		/*除了SQLite数据库外,SharedPreferences也是一种轻型的数据存储方式,它的本质是基于XML文件
		 *存储key-value键值对数据,通常用来存储一些简单的配置信息。其存储位置在/data/data/< >/sh
		 *ared_prefs目录下。SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是
		 *通过Editor对象实现。
		 */
		//sharedPreferences存储数据的步骤:
		//1.根据context获取SharedPreferences对象
		final SharedPreferences preferences=MainActivity.this.getSharedPreferences("setting",MODE_PRIVATE );
		//点击发生状态改变的时候,调用相应的方法
		checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener(){

			@Override
			public void onCheckedChanged(CompoundButton buttonView,
					boolean isChecked) {
				//2.通过SharedPreferences获取editor对象(对数据存储修改的对象)
				Editor editor=preferences.edit();
				//3.通过editor对象存储key-value键值对数据
				editor.putBoolean("wifi", isChecked);
				//4.通过commit方法提交数据
				editor.commit();
				
			}
		});
		//当点开当前页面的时候,从preferences中获取当前的的wifi开启状态
		Boolean boolean1 = preferences.getBoolean("wifi", false);
		checkBox.setChecked(boolean1);
		//当seekbar在移动的时候对其做一个监听
		this.seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
			@Override
			public void onStopTrackingTouch(SeekBar seekBar) {
				// 进度条停止的时候
				
			}
			@Override
			public void onStartTrackingTouch(SeekBar seekBar) {
				// 进度条开始移动
				
			}
			@Override
			public void onProgressChanged(SeekBar seekBar, int progress,
					boolean fromUser) {
				// 进度条运动后(在移动)
				Editor editor=preferences.edit();
				editor.putInt("seek", progress);
				editor.commit();
				
			}
		});
		int progress=preferences.getInt("seek", 0);
		this.seekBar.setProgress(progress);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}