天天看點

Android采用SharedPreferences方式進行檔案的儲存與讀取

工程目錄:

Android采用SharedPreferences方式進行檔案的儲存與讀取
Android采用SharedPreferences方式進行檔案的儲存與讀取

做軟體開發應該都知道,很多軟體會有配置檔案,裡面存放這程式運作當中的各個屬性值,由于其配置資訊并不多,如果采用資料庫來存放并不劃算,因為資料庫連接配接跟操作等耗時大大影響了程式的效率,是以我們使用鍵值這種一一對應的關系來存放這些配置資訊。SharedPreferences正是Android中用于實作這中存儲方式的技術。

下面直接貼實作代碼: package peixun.savaparameter.service;

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處于編輯狀态

package peixun.savaparameter;

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>
           

運作結果截圖:

Android采用SharedPreferences方式進行檔案的儲存與讀取
Android采用SharedPreferences方式進行檔案的儲存與讀取

在File Explorer下的data目錄下的data檔案下有一個shared_prefs檔案,儲存的檔案路勁就這這裡面,檔案名為我們輸入的姓名。

SharedPreferences的使用非常簡單,能夠輕松的存放資料和讀取資料。SharedPreferences隻能儲存簡單類型的資料,例如,String、int等。一般會将複雜類型的資料轉換成Base64編碼,然後将轉換後的資料以字元串的形式儲存在 XML檔案中,再用SharedPreferences儲存。