sharedPreferences(偏好参数保存)
案例效果图:
首先,编写界面:
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:text="姓名:" />
<EditText
android:id="@+id/editText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/name"
android:ems="10"
android:inputType="textPersonName" >
<requestFocus />
</EditText>
<TextView
android:id="@+id/age"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/editText1"
android:layout_marginTop="22dp"
android:text="年龄" />
<EditText
android:id="@+id/editText2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/age"
android:layout_marginTop="28dp"
android:ems="10"
android:inputType="textPersonName" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignTop="@+id/editText2"
android:onClick="save"
android:text="保存参数" />
</RelativeLayout>
然后,在主函数中获取编写功能代码:
import com.example.service.PreferencesService;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
private EditText nameText;
private EditText ageText;
private PreferencesService service;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取输入文本框editText1和editText2
nameText=(EditText)this.findViewById(R.id.editText1);
ageText =(EditText)this.findViewById(R.id.editText2);
service=new PreferencesService(this);
}
//保存的方法save()
public void save(View v){
//从输入框获取数据
String name=nameText.getText().toString();
String age= ageText.getText().toString();
service.save(name,Integer.valueOf(age));
Toast.makeText(getApplicationContext(),R.string.success,1).show();
}
@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;
}
}
在上面的方法中,需要一个类PreferencesService实现保存的功能:
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
public class PreferencesService {
//引入上下文对象
private Context context;
//通过构造器传进来
public PreferencesService(Context context) {
super();
this.context = context;
}
/*保存参数
* name 姓名
* age 年龄
* */
public void save(String name, Integer age) {
// TODO Auto-generated method stub
//getSharedPreferences()中的两个参数,前一个是用于指定文件名的,不需要加后缀;后一个是用于指定操作权限
SharedPreferences preference=context.getSharedPreferences("baocunwenjain", context.MODE_PRIVATE);
//取得编辑器对象然后往preference里存数据
Editor editor=preference.edit();
//将name和age两个内容放于内存中(name和age可自定义名字)
editor.putString("name", name);
editor.putInt("age", age);
//一定不要忘了把数据提交回文件中
editor.commit();
}
}
注意:在编写过程中,我们可以把参数存在String中:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">sharedPreferences</string>
<string name="action_settings">Settings</string>
<string name="success">保存完成</string>
</resources>
这样,就完成了手机对数据的保存了。
效果:
现在要在以上功能上,增加在输入框回显上一次输入文本的数据,则需要做如下改动:
在类PreferencesService中加入如下代码:
/*获取各项配置参数*/
public Map<String, String> getPreferences(){
Map<String, String> params=new HashMap<String, String>();
//取出之前保存数据的文件“baocunwenjain”
SharedPreferences preference=context.getSharedPreferences("baocunwenjain", context.MODE_PRIVATE);
preference.getString("baocunwenjain", "");
params.put("name", preference.getString("name", ""));
params.put("age", String.valueOf(preference.getInt("age", 0)));
return params;
}
再在MainActivity中onCreate(Bundle savedInstanceState) 方法中加入:
//取得各项参数
Map<String, String> params=service.getPreferences();
//取得各项参数后将数据填充给输入框
nameText.setText(params.get("name"));
ageText .setText(params.get("age"));
这样,在打开界面时就会回显出上一次输入的数据了。