Android平臺給我們提供了一個SharedPreferences類,實際上SharedPreferences處理的就是一個key-value(鍵值對),它是 一個輕量級的存儲類,特別適合用於保存軟體配置參數及用戶的偏好設置參數,比如登錄時候的記住密碼功能等。使用 SharedPreference
Android平臺給我們提供了一個SharedPreferences類,實際上SharedPreferences處理的就是一個key-value(鍵值對),它是
一個輕量級的存儲類,特別適合用於保存軟體配置參數及用戶的偏好設置參數,比如登錄時候的記住密碼功能等。使用
SharedPreferences保存數據,實際上是用xml文件存放數據,文件存放在/data/data/<package name>/shared_prefs目錄下
:
1.獲取SharedPreferences對象的兩種方式:
①調用Context對象的getSharedPreferences()方法
②調用Activity對象的getPreferences()方法
兩種方式的區別:
調用Context對象的getSharedPreferences()方法獲得的SharedPreferences對象可以被同一應用程式下的其他組件共用.
調用Activity對象的getPreferences()方法獲得的SharedPreferences對象只能在該Activity中使用.
2.SharedPreferences的四種操作模式:
Context.MODE_PRIVATE:為預設操作模式,代表該文件是私有數據,只能被應用本身訪問,在該模式下,寫入的內容會覆蓋原文件
的內容
Context.MODE_APPEND:模式會檢查文件是否存在,存在就往文件追加內容,否則就創建新文件.
Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用來控制其他應用是否有許可權讀寫該文件.
MODE_WORLD_READABLE:表示當前文件可以被其他應用讀取.
MODE_WORLD_WRITEABLE:表示當前文件可以被其他應用寫入.
3.SharedPreferences類的應用實例:
①創建佈局文件:activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/name" />
<EditText
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/age" />
<EditText
android:id="@+id/age"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:numeric="integer"/>
<!--android:onClick用於指定一個方法名稱,按鈕被點擊後就會執行該方法 -->
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button"
android:onClick="save"/>
</LinearLayout>
②創建業務類PreferenceService.java
public class PreferenceService {
private Context context;
public PreferenceService(Context context) {
this.context = context;
}
//保存配置參數
public void save(String name,Integer age){
SharedPreferences sp=context.getSharedPreferences("testSP", Context.MODE_PRIVATE);
Editor editor=sp.edit();
editor.putString("name", name);
editor.putInt("age", age);
//將數據提交的文件中
editor.commit();
}
//獲取配置參數
public Map<String, String> getPreference(){
//創建Map集合用來保存我們從SharedPreference中獲取的數據
Map<String, String> params=new HashMap<String, String>();
SharedPreferences sp=context.getSharedPreferences("testSP", Context.MODE_PRIVATE);
//SharedPreferences類的getString("name", "")方法中第一個參數是參數名,第一個參數是參數的預設值
params.put("name", sp.getString("name", ""));
params.put("age", String.valueOf(sp.getInt("age", 0)));
return params;
}
}
③創建程式的入口MainActivity.java
public class MainActivity extends Activity {
private EditText nameText;
private EditText ageText;
private PreferenceService service;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
nameText=(EditText) findViewById(R.id.name);
ageText=(EditText) findViewById(R.id.age);
service =new PreferenceService(this);
Map<String, String> params=service.getPreference();
nameText.setText(params.get("name"));
ageText.setText(params.get("age"));
}
/**
* save方法要求:
* 參數必須是View類型
* 且無返回值
*/
public void save(View v){
String name=nameText.getText().toString();
String age=ageText.getText().toString();
service.save(name,Integer.valueOf(age));
Toast.makeText(getApplicationContext(),"保存成功", Toast.LENGTH_LONG).show();
}
}