標籤: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