[Android學習]Android資料的四種儲存方式(1)--SharedPreferences

來源:互聯網
上載者:User

所有應用程式都必然涉及資料的輸入、輸出,Android應用也不例外,應用程式的參數設定、程式運行狀態資料這些都必須儲存到外部儲存器上,這樣系統關機後資料才不會丟失。當然,對於需要操作資料的多少就應該選擇不同的儲存方式,因此Android系統共提供了四種資料儲存方式,分別為:SharedPreferences,File,SQLite,ContentProvider.

SharedPreferences:除了SQLite資料庫外,SharedPreferences也是一種輕型的資料儲存方式,它的本質是基於XML檔案儲存體key-value索引值對資料,通常用來儲存一些簡單的配置資訊。SharedPreferences介面本身並沒有提供寫入資料的能力,而是通過SharedPreferencesde的內部介面,SharedPreferences調用edit()方法即可擷取它所對應的Editor對象。實現SharedPreferences儲存的步驟如下:

1、擷取SharedPreferences對象

2、利用edit()方法擷取Editor對象

3、通過Editor對象儲存key-value索引值對資料

4、通過commit()方法提交資料

例一:下面的代碼儲存三個資料,分別為String,Int,Boolean型,具體如下:

 

package com.ye_yun_lin.sharedpreferencestest;import android.os.Bundle;import android.preference.Preference;import android.app.Activity;import android.content.SharedPreferences;import android.view.Menu;public class MainActivity extends Activity {private SharedPreferences sharedPreferences;private SharedPreferences.Editor editor;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);sharedPreferences=getSharedPreferences("My_XML", MODE_WORLD_READABLE);editor=sharedPreferences.edit();editor.putString("String_key", "string");editor.putInt("Int_key", 3);editor.putBoolean("Boolean_key", true);editor.commit();}}

這段代碼執行完後,在/data/data/com.ye_yun_lin.SharedPrefer/shared_prefs目錄下產生了一個SP.My_XML檔案,一個應用可以建立多個這樣的檔案。用DDMS介面的匯出檔案按鈕,匯出後開啟如下:

 

 

例二:記錄應用程式的使用次數:

這個執行個體可以記住應用程式的使用次數,當使用者第一次啟動該程式時,系統建立SharedPreferences來記錄使用次數。使用者以後啟動該應用程式時,系統先讀取SharedPreferences中的使用次數,然後將使用次數加1.代碼如下:

 

package com.ye_yun_lin.usecount;import android.R.integer;import android.os.Bundle;import android.preference.Preference;import android.app.Activity;import android.content.SharedPreferences;import android.view.Menu;import android.widget.Toast;public class MainActivity extends Activity {private SharedPreferences sharedPreferences;private SharedPreferences.Editor editor;private int count;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);sharedPreferences=getSharedPreferences("count",MODE_WORLD_WRITEABLE);editor=sharedPreferences.edit();count=sharedPreferences.getInt("count", 0);Toast.makeText(this, "該應用程式被使用了"+count+"次!", Toast.LENGTH_LONG).show();editor.putInt("count", ++count);editor.commit();}}

例三:讀寫其他應用SharedPreferences。

 

要讀或寫其他程式的SharedPreferences,前提是要建立該應用程式指定相應的存取權限。比如MODE_WORLD_READABLE(只可被其他程式讀),MODE_WORLD_WRITABLE(可被其他程式讀或寫).其步驟如下:

1、需要建立其他程式對應的Context,例如如下代碼:

 

useContext=createPackageContext("com.ye_yun_lin.usecount", Context.CONTEXT_IGNORE_SECURITY);

上面的com.ye_yun_lin就是其他程式的包名

 

2、條用其他程式的Context的getSharedPreferences()即可擷取相應的SharedPreferences對象

3、如果需要向其他應用的SharedPreferences資料寫入資料,調用SharedPreferences的edit()方法擷取相應的editor即可。

代碼如下:

 

package comye_yun_line.useotherpreferences;import android.os.Bundle;import android.app.Activity;import android.content.Context;import android.content.SharedPreferences;import android.content.pm.PackageManager.NameNotFoundException;import android.view.Menu;import android.widget.TextView;public class MainActivity extends Activity {private Context useContext=null;private SharedPreferences preferences;private int count;private TextView textView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);try {useContext=createPackageContext("com.ye_yun_lin.usecount", Context.CONTEXT_IGNORE_SECURITY);} catch (NameNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}preferences=useContext.getSharedPreferences("count", Context.MODE_WORLD_READABLE);count=preferences.getInt("count", 0);textView=(TextView)findViewById(R.id.textview);textView.setText(count+"");}}

SharedPreferences對象與SQLite資料庫相比,免去了建立資料庫、建立表、寫SQL語句等操作,相對而言更加方便簡潔。但是SharedPreferences也有其自身的缺陷,比如只能儲存boolean,int,string,float,long五種簡單的資料類型,比如其無法進行條件查詢等。所以不論SharedPreferences的資料儲存多麼簡潔,也只能是儲存方式的一種補充,而無法完全代替SQLite資料庫這樣的儲存方式。

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.