【Android】 Android存储之 sharedpreferences (用户偏好设置)

时间:2021-10-17 05:33:23

在一款软件里,我们经常能使用到的就是用户的偏好设置了。这里提供了如何保存用户对其偏好的设置,该操作的存储位置是:/data/data/share_dprefs

我发现个问题,做android是不是都要先把效果图发上来啊,我以前疏忽了,以后但凡项目或是demo都先把效果图发上来;

【Android】 Android存储之 sharedpreferences (用户偏好设置)

不知道为什么,上传的图片变形了,不过不管他了,只是一个简单的见面而已,两个TextView两个editText一个按钮,就这么简单。

这里就直接上代码了,没什么可讲的,注释也已经很详细了,相信很多人都能看懂。

private Context context;
	
	public PreferencesServices(Context context) {
		this.context = context;
	}

	/**
	 * 保存用户偏好设置
	 */
	
	public void save(String name, int age) {
	
		//第一个参数  是最终保存的文件名,不用指定文件后缀,因为SharedPreferences这个API默认就是xml格式保存
		//第二个参数是文件操作模式,这里是只能本软件自己访问的私有操作模式
		SharedPreferences preferences = context.getSharedPreferences("text",Context.MODE_PRIVATE );
		Editor editor = preferences.edit();
		editor.putString("name", name);
		editor.putInt("age", age);
		editor.commit();//把数据提交到文件里,在这之前数据都是存放在内存中
	}

这样就可以了,在MainActivity里布置一下:

 

 
    public void save(View v){
    	
    	String name = ed1.getText().toString();
    	int age = Integer.valueOf(ed2.getText().toString());
    	services.save(name,age);
    	Toast.makeText(MainActivity.this, "保存成功", 5).show();
    }

这里为什么直接用一个方法就行了呢,因为我在布局文件是这样设置按钮的:

 <Button 
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="保存"
        android:onClick="save"
        />


 对Button使用onClick这个参数方法。

这样的话,就可以直接调用该布局对应的Activity里的save这个方法了,注意了一定是只能使用该布局对应的Activity里的方法。

用户参数的保存就写完了,下面是用户设置的读取,这里使每次运行程序时,都回调用上次用户的设置:

 /**
     * 读取用户偏好设置,回选出上次用户设置的参数
     */
    
    public Map<String ,String > getPreferences(){
    	Map<String ,String > map = new HashMap<String, String>();
    	SharedPreferences preferences = context.getSharedPreferences("text",Context.MODE_PRIVATE );//text为文件名称
    	map.put("name", preferences.getString("name", ""));//第二个参数,如何name里没有值,就将第二个参数返回,这里默认为空
        map.put("age", String.valueOf(preferences.getInt("age", 0)));
    	
		return map;
    }


注释很详细,不再赘述。

看一下简单的MainActivity:


 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ed1 = (EditText) this.findViewById(R.id.name);
        ed2 = (EditText) this.findViewById(R.id.age);
        services = new PreferencesServices(MainActivity.this);
        Map<String,String> map = services.getPreferences();
        ed1.setText(map.get("name"));
        ed2.setText(map.get("age"));
        
    }


ok,运行起来吧。


忘了,把文件保存路径补上:

【Android】 Android存储之 sharedpreferences (用户偏好设置)