`
longgangbai
  • 浏览: 7249328 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Android的信息存储文件和SharedPreferences的方式

 
阅读更多

   任何一个应用程序都要依赖数据存储,而且这种存储必须不丢失数据,并且有效、简便使用和更新这些数据。在 Android 操作系统中一共提供了4种数据存储方式,但是由于存储的这些数据都是私有的,所以如果需要共享其他应用程序的数据,就需要我们上篇文章说到的 Content Provider。4种数据存储方式分别为如下:

  • 1、Shared Preferences。
    用来存储 “键-值”格式的数据。
  • 2、Files。
    通过FileInputStream和FileOutputStream对文件进行操作。
  • 3、SQLite。
    标准数据库,支持SQL语句。
  • NetWork。
    通过网络存储和获取数据。
本篇中主要讲述4种之一的Shared Preferences,因为在前几篇己经有SQLite的用法做了简单介绍,所以在以下的几篇将会跳过SQLite的讲解。下面开始讲述Shared Preferences。主要内容如下:
  • 1、Shared Preferences 是什么?
  • 2、如何使用 Shared Preferences 获得数据?
  • 3、如何使用 Shared Preferences 保存数据?
    • 3.1、使用getPreferences方法创建文件的模式。
  • 4、模拟用户参数设置。
  • 5、查看 Preferences 产生的文件。
1、Shared Preferences 是什么?
Shared Preferences 类似于winform中做一些小型配置的ini文件,用来保存一些用户设置的参数。例如,可以通过它保存上一次用户所做的修改或者自定义参数设定,当再次启动程序后依然保持原有设置。

2、如何使用 Shared Preferences 保存数据?
Shared Preferences提供了getPreferences方法来获得Preferences对象,取得该对象了,即可以使用Editor取得编辑对象

3、如何使用 Shared Preferences 保存数据?

上文获得Editor对象之后即可通过 Android 提供的各自操作函数进行数据提交,如:putBoolean()提交一个键值 为bool值的数据,最后通过commit方法保存这些数据。
      3.1、使用getPreferences方法创建文件的模式
在 Android系统提供的API中, 获取 Preferences对象有四种类型,分别如下:
  • 文件创建模式:Activity.MODE_APPEND
    如果该文件已经存在,然后将数据写入,而不是抹掉它现有文件的末尾。
  • 文件创建模式:MODE_PRIVATE
    默认模式,在那里创建的文件只能由应用程序调用,即为私有的
  • 文件创建模式:Activity.MODE_WORLD_READABLE
    允许所有其他应用程序有读取和创建文件的权限。
  • 文件创建模式:Activity.MODE_WORLD_WRITEABLE
    允许所有其他应用程序具有写入、访问和创建的文件权限。
本例中使用到了私有的文件创建模式,来获取Preferences对象。

 

   在Android中可能需要将数据保存在本地的手机上面的文件中可以采用两种方式:

1.采用Java IO方式写文件实现:

		/**
		 * 从文件中读取数据,这是很简单的java应用,IO操作
		 * @return
		 */
		private String read()
		{
			try
			{
				//打开文件输入流
				FileInputStream fis = openFileInput(FILE_NAME);
				byte[] buffer = new byte[1024];
				int hasRead = 0;
				StringBuffer sb = new StringBuffer();
				while((hasRead = fis.read(buffer)) > 0){
					sb.append(new String(buffer, 0, hasRead));
				}
				
				return sb.toString();
				
			} catch (Exception e)
			{
				e.printStackTrace();
			}
			
			return null;
			
		}
		
		/**
		 * 将数据写入文件,也是很简单的IO操作
		 * @param string
		 */
		private void write(String string)
		{
			try
			{
				//以覆盖方式打开文件输出流
				FileOutputStream fos = openFileOutput(FILE_NAME, 0);
				//将FileOutputStream包装成PrintStream
				PrintStream ps = new PrintStream(fos);
				//输出文件内容
				ps.println(string);
				ps.close();
				
			} catch (FileNotFoundException e)
			{
				e.printStackTrace();
			}
			
		}

 

2.采用SharedPreferences的方式实现

		@Override
		protected void onCreate(Bundle savedInstanceState)
		{
			// TODO Auto-generated method stub
			super.onCreate(savedInstanceState);
			setContentView(R.layout.shared_preferences);
			
			//获取只能被本程序读,写的SharedPreferences对象
			preferences = getSharedPreferences("shared", 0);
			//获取SharedPreferences的edit对象
			edit = preferences.edit();
			
			str = "悟空杀死了" + count + "只妖怪.";
			
			text = (TextView)findViewById(R.id.textView1);
			text.setText(str);
			
			edit_text = (EditText)findViewById(R.id.editText1);
			edit_text.setText(String.valueOf(count));
			
			add = (Button)findViewById(R.id.addOne);
			add.setOnClickListener(this);
			
			read_edit = (Button)findViewById(R.id.read_edit);
			read_edit.setOnClickListener(this);
			
			save = (Button)findViewById(R.id.save);
			save.setOnClickListener(this);
			
			read = (Button)findViewById(R.id.read);
			read.setOnClickListener(this);
			
			clear = (Button)findViewById(R.id.clear);
			clear.setOnClickListener(this);
			
		}
		
		//按钮事件监听
		@Override
		public void onClick(View v)
		{
			switch(v.getId()){
			//悟空又打死了一个妖怪按钮事件
			case R.id.addOne:
				
				//妖怪数量加1
				count++;
				//刷新TextView和EditText控件中的值
				refresh();
				
				break;
				
			//读取Edit中的数据按钮事件
			case R.id.read_edit:
				
				//取出存在SharedPreferences中的值
				count =Integer.parseInt(edit_text.getText().toString());
				refresh();
				
				break;
				
			case R.id.save:
				
				//将悟空打死妖怪的数量存入SharedPreferences中
				edit.putString("number", String.valueOf(count));
				edit.commit();
				
				break;
				
			case R.id.read:
				
				//从SharedPreferences中取出悟空打死妖怪的数量
				count =Integer.valueOf(preferences.getString("number", "0"));
				refresh();
				
				break;
				
			case R.id.clear:
				
				//清除SharedPreferences中所有的数据
				edit.clear();
				edit.commit();
				count = 0;
				refresh();
				
				break;
			
			}
			
		}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics