第三十五講:Android資料儲存之SharedPreferences

來源:互聯網
上載者:User

標籤:des   android   style   blog   http   io   ar   os   使用   

人的一生,總是難免有浮沉。不會永遠如旭日東升,也不會永遠痛苦潦倒。反覆地一浮一沉,對於一個人來說,正是磨練。因此,浮在上面的,的,不必驕傲;沉在底下的,更用不著悲觀。必須以率直、謙虛的態度,樂觀進取、向前邁進。 —— 松下幸之助


本講內容:SharedPreferences 資料儲存

一、SharedPreferences的作用

應用程式在啟動並執行時候,可能會隨著使用者的使用而保持該使用者的配置資訊,如上次播放時的eq設定,音量設定等等,這些小量 的資訊可以通過SharedPreferences來保持,通過SharedPreferences保持的資料為一個XML檔案,位於應用程式的私人檔案夾。儲存的資料主要是簡單類型的鍵值對(key-value)


二、SharedPreferences是一個介面,程式是無法建立SharedPreferences執行個體的,可以通過Context.getSharedPreferences(String name.int mode)來得到一個SharedPreferences執行個體

name:是指檔案名稱,不需要加尾碼.xml,系統會自動為我們添加上。一般這個檔案儲存體在/data/data/<package name>/shared_prefs下(這個面試常問到)

mode:是指定讀寫方式,其值有三種,分別為:

Context.MODE_PRIVATE:指定該SharedPreferences資料只能被本應用程式讀、寫

Context.MODE_WORLD_READABLE:指定該SharedPreferences資料能被其他應用程式讀,但不能寫

Context.MODE_WORLD_WRITEABLE:指定該SharedPreferences資料能被其他應用程式讀寫


三、由於SharedPreference是一個介面,而且在這個介面裡並沒有提供寫入資料和讀取資料的能力。但是在其內部有一個Editor內部的介面,Editor這個介面有一系列的方法用於操作SharedPreference。

Editor介面的常用方法

public abstract SharedPreferences.Editor clear () 清空SharedPreferences裡所有的資料
public abstract boolean commit () 當Editor編輯完成後,調用該方法可以提交修改,而且必須要調用這個資料才修改
public abstract SharedPreferences.Editor putXXX (String key, boolean XXX) 向SharedPreferences存入指定的key對應的資料,其中XXX可以是boolean、float、int、long、String等基本類型的值
public abstract SharedPreferences.Editor remove (String key) 刪除SharedPreferences裡指定key對應的資料項目

四、下面我們通過service的一個音樂播放例子,“播放”與“暫停”兩個按鈕暫停之後,保持播放進度到SharedPreferences裡面,然後再次播放的話,讀取進度值進行音樂播放。

下面是res/layout/activity_main.xml 布局檔案:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    android:background="@drawable/c1"    tools:context="com.example.text.MainActivity$PlaceholderFragment" >   <Button         android:id="@+id/button01"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="play"        android:textSize="20sp"        android:layout_marginTop="5dp"/>    <Button         android:id="@+id/button02"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="pause"        android:textSize="20sp"        android:layout_marginTop="5dp"/></LinearLayout>

下面是建立一個MusicService.java介面檔案:

public class MusicService extends Service{private MediaPlayer player;public IBinder onBind(Intent intent) {return null;}@Overridepublic void onCreate() {player=MediaPlayer.create(this, R.raw.apple);player.setLooping(false); //設定不自動迴圈}//該服務被銷毀時調用該方法@Overridepublic void onDestroy() {SharedPreferences sp = this.getSharedPreferences("music_progress", MODE_PRIVATE);//獲得editor對象,寫入一個整數到SharePreferences中,記住要用commit()提交,否則不會實現寫入操作        sp.edit().putInt("progress", player.getCurrentPosition()).commit();          // player.getCurrentPosition()方法擷取播放進度的資料          // commit()方法是儲存SharedPreferences擷取來的資料          player.stop();  }public void onStart(Intent intent, int startId) {//獲得SharedPreferences對象SharedPreferences sp = this.getSharedPreferences("music_progress", MODE_PRIVATE);   // music_progress為XML檔案的檔案名稱  //播放器跳轉到上一次播放的進度        player.seekTo(sp.getInt("progress", 0));          // progress為索引值對中的key,progress所對應的值通過player.getCurrentPosition()獲得,請看下面詳細          // 每次調用onStart方法時,就會設定player的進度          // MediaPlayer的seekTo方法,讀取進度,然後播放,getInt的第一個參數是所要讀取的key名字,第二個參數為預設初始值。也就是說進度初始預設為0          player.start();  }}

注意在AndroidManifest.xml檔案中註冊


下面是MainActivity.java主介面檔案:

public class MainActivity extends Activity implements OnClickListener{private Button b1;private Button b2;private Intent intent;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);b1=(Button) findViewById(R.id.button01);b2=(Button) findViewById(R.id.button02);b1.setOnClickListener(this);b2.setOnClickListener(this);intent = new Intent(MainActivity.this,MusicService.class); }@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.button01:startService(intent);    break;case R.id.button02: stopService(intent);    break;}}}

下面是運行結果:



本講到這裡,謝謝大家!



第三十五講:Android資料儲存之SharedPreferences

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.