在一款软件里,我们经常能使用到的就是用户的偏好设置了。这里提供了如何保存用户对其偏好的设置,该操作的存储位置是:/data/data/share_dprefs
我发现个问题,做android是不是都要先把效果图发上来啊,我以前疏忽了,以后但凡项目或是demo都先把效果图发上来;
不知道为什么,上传的图片变形了,不过不管他了,只是一个简单的见面而已,两个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,运行起来吧。
忘了,把文件保存路径补上: