android学习十(android的SharePreferences存储)

        不同于文件的存储方式,SharePreferences是使用键值对的方式来存储数据的,也就是保存数据的时候需要给这条数据提供一个对应的键,这样在读取数据的时候就可以通过这个键把相应的值取出来。而且SharePreferences支持多种不同的数据类型存储,如果存储的数据书整形类型,读取出来的数据也是整形的,存储的数据是一个字符串,读取出来的数据仍然是一个字符串。

       要想使用SharePreferences来存储数据,首先要获取到SharePreferences对象,android系统中主要提供了3种方式用于得到SharePreferences对象。

1.Context类中的getSharePreferences()方法:该方法接收2个参数,一个参数用于指定SharePreferences文件的名称,如果指定的文件不存在则会创建一个,SharePreferences文件都是存放在/data/data/<packagename>/shared_prefs/目录下的。第二个参数用于指定操作模式,主要有2种模式可选,MODE_PRIVATE和MODE_MULTI_PROCESS。MODE_PRIVATE仍然是默认的操作模式,和直接传入0效果是相同的,表示只有当前的应用程序才可以对这个SharePreferences文件进行读写。MODE_MULTI_PROCESS则一般用于会有多个进程中对同一个SharePreferences文件进行读写的情况。

2.Activity类中的getPreferences()方法:这个方法和Context中的getSharePreferences()方法很类似,不过只接收一个操作模式参数,因为使用这个方法时会自动将当前活动的类名作为SharePreferences文件名。

3.PreferenceManager类中的getDefaultSharedPreferences()方法:这是一个静态方法,它接收一个Context参数,并自动使用当前应用程序的包名作为前缀来命名SharePreferences文件。

     得到SharePreferences对象之后,就可以开始向SharePreferences文件中存储数据了,主要分为三部实现:

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

2.向SharePreferences.Editor对象中添加数据,比如添加一个布尔类型数据就使用putBoolean方法。

3.调用commit()方法将添加的数据提交,从而完成数据存储操作。

将数据保存到SharePreferences中

下面我们来个小例子测试下上面的内容吧,新建一个SharePreferencesTest项目,然后修改activity_main.xml中的代码,如下所示:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/save_data"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="save data" />

</LinearLayout>


上面的代码比较简单,就不多说了,下面修改MainActivity类里面的代码,如下:

package com.jack.sharedpreferencestest;

import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {

	private Button saveData;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		saveData=(Button) findViewById(R.id.save_data);
		saveData.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				//获得SharedPreferences.Editor对象
				SharedPreferences.Editor editor=getSharedPreferences("share",
						MODE_PRIVATE).edit();
				editor.putString("name", "jack");
				editor.putInt("age", 22);
				editor.putBoolean("married", false);
				editor.commit();//提交数据
			}
		});
	}

	@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;
	}

}

运行程序,点击save data按钮,这时候的数据已经保存了,我们借助File Exploer来进行查看,进入到/data/data/com.jack.sharedpreferencestest/shared_prefs/目录下,可以看到如下一个share文件





把文件导出来,查看内容如下所示:



注意:有时候我们运行程序查看file explorer的时候,发现里面没有任何的文件,这时候可能是由于我们没在devices中选择正确的运行的进程,只要在下面的地方点击当前运行程序的包名就行了,如下黑色线圈起来的地方:



这样file explorer就会显示目录结构了。


SharePreferences中读取数据

    从SharePreferences读取数据比较的简单,SharePreferences对象提供了一系列的get方法用于对存储的数据进行读取,每种get方法都对应SharePreferences.Editor中的一种put方法。这些get方法都接收两个参数,第一个参数是键,传入存储数据时使用的键就可以得到相应的值了,第二个参数是默认值,即表示当传入的键找不到相应的值时,会以什么样的默认值进行返回。

      在上面的项目中进行修改,首先修改activity_main.xlm中的代码,如下所示:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/save_data"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="save data" />

    <Button
        android:id="@+id/restore_data"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="restore data" />
    
    
    
</LinearLayout>

修改MainActivity中的代码:

package com.jack.sharedpreferencestest;

import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {

	private Button saveData;
	private Button restoreData;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		saveData=(Button) findViewById(R.id.save_data);
		restoreData=(Button) findViewById(R.id.restore_data);
		saveData.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				//获得SharedPreferences.Editor对象
				SharedPreferences.Editor editor=getSharedPreferences("share",
						MODE_PRIVATE).edit();
				editor.putString("name", "jack");
				editor.putInt("age", 22);
				editor.putBoolean("married", false);
				editor.commit();//提交数据
			}
		});
		
		
		restoreData.setOnClickListener(new OnClickListener(){

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				SharedPreferences pref=getSharedPreferences("share", MODE_PRIVATE);
				String name=pref.getString("name", null);
				int age=pref.getInt("age", 0);
				boolean married=pref.getBoolean("married", false);
				Log.d("MainActivity", "name is "+name);
				Log.d("MainActivity", "age is "+age);
				Log.d("MainActivity", "married is "+married);
				
			}
			
		});
		
		
		
		
		
	}

	@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;
	}

}

运行程序,点击restore data按钮,查看日志如下所示:


上面的小例子就是读取SharePreferences文件里面的内容的,可以举一反三哦。


关于SharePreferences文件的使用就总结到这,下面一篇我将总结下android数据SQLite的使用。


转载请注明:http://blog.csdn.net/j903829182/article/details/40952301

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。