工程目錄:
做軟件開發應該都知道,很多軟件會有配置文件,裏面存放這程序運行當中的各個屬性值,由於其配置信息並不多,如果採用數據庫來存放並不划算,因爲數據庫連接跟操作等耗時大大影響了程序的效率,因此我們使用鍵值這種一一對應的關係來存放這些配置信息。SharedPreferences正是Android中用於實現這中存儲方式的技術。
下面直接貼實現代碼:
package peixun.savaparameter.service;
PreferenceService類:
PreferenceService類:
<span style="font-size:18px;">package peixun.savaparameter.service;
import java.util.HashMap;
import java.util.Map;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.preference.Preference;
public class PreferenceService {
private Context context;
public PreferenceService(Context context) {
super();
this.context = context;
}
public void save(String name, Integer age) {
// TODO Auto-generated method stub
SharedPreferences preference=context.getSharedPreferences(name, Context.MODE_PRIVATE);
Editor editor=preference.edit();
editor.putString("name", name);
editor.putInt("age", age);
editor.commit();
}
public Map<String,String> getParameter(String name){
Map<String, String> params=new HashMap<String, String>();
SharedPreferences preference=context.getSharedPreferences(name, Context.MODE_PRIVATE);
params.put("name", preference.getString("name", ""));
params.put("age", String.valueOf(preference.getInt("age", 0)));
return params;
}
}</span><strong>
</strong>
註解://打開Preferences,名稱爲name,如果存在則打開它,否則創建新的Preferences,寫入方式爲Context.MODE_PRIVATE。
SharedPreferences preference=context.getSharedPreferences(name, Context.MODE_PRIVATE);
Editor editor=preference.edit();//讓Editor處於編輯狀態
MainActivity類:
package peixun.savaparameter;
import java.util.Map;
import peixun.savaparameter.service.PreferenceService;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
private EditText nameText;
private EditText ageTest;
private PreferenceService service;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
nameText=(EditText) this.findViewById(R.id.name);
ageTest=(EditText) this.findViewById(R.id.age);
service=new PreferenceService(this);
String name=nameText.getText().toString();
Map<String, String> paramers=service.getParameter(name);
nameText.setText(paramers.get("name"));
ageTest.setText(paramers.get("age"));
}
public void save(View v)
{
String name=nameText.getText().toString();
String age=ageTest.getText().toString();
PreferenceService service=new PreferenceService(getApplicationContext());
service.save(name,Integer.valueOf(age));
Toast.makeText(getApplicationContext(), R.string.savaSuccess, 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;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
layout目錄下的界面activity_main.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/name"
/>
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/name"/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/age"/>
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/age"/>
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/savaButton"
android:onClick="save"
android:id="@+id/saveButton"/>
</LinearLayout>
values目錄下的String.xml文件
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">保存參數</string>
<string name="action_settings">Settings</string>
<string name="name">姓名</string>
<string name="age">年齡</string>
<string name="savaButton">保存參數</string>
<string name="savaSuccess">保存成功</string>
<string name="savaFailed">保存失敗</string>
</resources>
運行結果截圖:
在File Explorer下的data目錄下的data文件下有一個shared_prefs文件,保存的文件路勁就這這裏面,文件名爲我們輸入的姓名。
SharedPreferences的使用非常簡單,能夠輕鬆的存放數據和讀取數據。SharedPreferences只能保存簡單類型的數據,例如,String、int等。一般會將複雜類型的數據轉換成Base64編碼,然後將轉換後的數據以字符串的形式保存在 XML文件中,再用SharedPreferences保存。