Android採用SharedPreferences方式進行檔案的儲存與讀取
阿新 • • 發佈:2019-02-07
工程目錄:
做軟體開發應該都知道,很多軟體會有配置檔案,裡面存放這程式運行當中的各個屬性值,由於其配置資訊並不多,如果採用資料庫來存放並不划算,因為資料庫連線跟操作等耗時大大影響了程式的效率,因此我們使用鍵值這種一一對應的關係來存放這些配置資訊。SharedPreferences正是Android中用於實現這中儲存方式的技術。
下面直接貼實現程式碼: package peixun.savaparameter.service;PreferenceService類:
註解: //開啟Preferences,名稱為name,如果存在則開啟它,否則建立新的Preferences,寫入方式為Context.MODE_PRIVATE。<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>
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>
執行結果截圖:
在File Explorer下的data目錄下的data檔案下有一個shared_prefs檔案,儲存的檔案路勁就這這裡面,檔名為我們輸入的姓名。
SharedPreferences的使用非常簡單,能夠輕鬆的存放資料和讀取資料。SharedPreferences只能儲存簡單型別的資料,例如,String、int等。一般會將複雜型別的資料轉換成Base64編碼,然後將轉換後的資料以字串的形式儲存在 XML檔案中,再用SharedPreferences儲存。