Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> Android學習指南之十八:共享參數類SharedPreferences的使用

Android學習指南之十八:共享參數類SharedPreferences的使用

編輯:關於android開發

       Android系統在數據存儲和數據共享方面提供了多種方式,包括前面我們講過的使用SQLite數據庫的方式,本文將為大家講解另一種共享數據和存儲數據的方式-共享參數類SharedPreferences的使用。

       一、SharedPreferences簡介

       SharedPreferences是一種輕量級的數據存儲方式,學過Web開發的同學,可以想象它是一個小小的Cookie。它可以用鍵值對的方式把簡單數據類型(boolean、int、float、long和String)存儲在應用程序的私有目錄下(data/data/包名/shared_prefs/)自己定義的xml文件中。下面我們用一個記錄音樂播放進度的例子來學習SharedPreferences的使用。

       二、SharedPreferences實例

       1、建立一個新的項目Lesson19_HelloSharedPreferences,Activity名字叫MainHelloSharedPreferences.java。

       2、建立一個MusicService.java的Service,代碼如下:

Java代碼
  1. package android.basic.lesson19;   
  2.   
  3. import android.app.Service;   
  4. import android.content.Context;   
  5. import android.content.Intent;   
  6. import android.content.SharedPreferences;   
  7. import android.media.MediaPlayer;   
  8. import android.os.IBinder;   
  9. import android.widget.Toast;   
  10.   
  11. public class MusicService extends Service {   
  12.   
  13.         //定義MediaPlayer播放器變量   
  14.         MediaPlayer mPlayer = new MediaPlayer();   
  15.   
  16.         @Override  
  17.         public void onCreate() {   
  18.                 Toast.makeText(getApplicationContext(), "Service onCreate()", Toast.LENGTH_LONG).show();   
  19.                 //創建播放器   
  20.                 mPlayer = MediaPlayer.create(getApplicationContext(), R.raw.babayetu);   
  21.                 //設置自動循環   
  22.                 mPlayer.setLooping(true);   
  23.         }   
  24.   
  25.         @Override  
  26.         public IBinder onBind(Intent intent) {   
  27.                 Toast.makeText(getApplicationContext(), "Service onBind()", Toast.LENGTH_LONG).show();   
  28.                 //獲得SharedPreferences對象   
  29.                 SharedPreferences preferences = this.getSharedPreferences("MusicCurrentPosition",Context.MODE_WORLD_WRITEABLE);   
  30.                 //播放器跳轉到上一次播放的進度   
  31.                 mPlayer.seekTo(preferences.getInt("CurrentPosition", 0));   
  32.                 //開始播放   
  33.                 mPlayer.start();   
  34.                 return null;   
  35.         }   
  36.   
  37.         @Override  
  38.         public boolean onUnbind(Intent intent){   
  39.                 Toast.makeText(getApplicationContext(), "Service onUnbind()", Toast.LENGTH_LONG).show();   
  40.                 //獲得SharedPreferences對象   
  41.                 SharedPreferences preferences = this.getSharedPreferences("MusicCurrentPosition",Context.MODE_WORLD_WRITEABLE);   
  42.                 Toast.makeText(getApplicationContext(), "CurrentPosition="+mPlayer.getCurrentPosition(), Toast.LENGTH_LONG).show();   
  43.                 //獲得editor對象,寫入一個整數到SharePreferences中,記住要用commit()提交,否則不會實現寫入操作   
  44.                 preferences.edit().putInt("CurrentPosition",mPlayer.getCurrentPosition()).commit();   
  45.                 mPlayer.stop();   
  46.                 return false;   
  47.         }   
  48. }  

       3、更改AndroidManifest.xml內容如下:

XML/HTML代碼
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest android:versionname="1.0" android:versioncode="1" xmlns:android="http://schemas.android.com/apk/res/android" package="android.basic.lesson19">  
  3.     <application android:icon="@drawable/icon" android:label="@string/app_name">  
  4.         <activity android:label="@string/app_name" android:name=".MainHelloSharedPreferences">  
  5.             <intent -filter="">  
  6.                 <action android:name="android.intent.action.MAIN">  
  7.                 <category android:name="android.intent.category.LAUNCHER">  
  8.             </category></action></intent>  
  9.         </activity>  
  10.             <service android:name=".MusicService" android:enabled="true">  
  11.             </service>  
  12.     </application>  
  13.     <uses android:minsdkversion="8" -sdk="">  
  14.   
  15. </uses></manifest>   

       4、res/layout/mail.xml的內容如下:

XML/HTML代碼
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent">  
  3.         <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:textsize="20sp" android:text="SharedPreferences的使用" android:id="@+id/TextView01">  
  4.         </textview>  
  5.   
  6. <button android:layout_width="wrap_content" android:layout_height="wrap_content" android:textsize="20sp" android:text="綁定音樂播放服務" android:id="@+id/Button01" android:layout_margintop="10dp">  
  7. </button>  
  8. <button android:layout_width="wrap_content" android:layout_height="wrap_content" android:textsize="20sp" android:text="解綁定音樂播放服務" android:id="@+id/Button02" android:layout_margintop="10dp">  
  9. </button>  
  10. </linearlayout>  

       5、MainHelloSharedPreferences.java的內容如下:

Java代碼
  1. package android.basic.lesson19;   
  2.   
  3. import android.app.Activity;   
  4. import android.content.ComponentName;   
  5. import android.content.Context;   
  6. import android.content.Intent;   
  7. import android.content.ServiceConnection;   
  8. import android.os.Bundle;   
  9. import android.os.IBinder;   
  10. import android.view.View;   
  11. import android.view.View.OnClickListener;   
  12. import android.widget.Button;   
  13. import android.widget.Toast;   
  14.   
  15. public class MainHelloSharedPreferences extends Activity {   
  16.     /** Called when the activity is first created. */  
  17.     @Override  
  18.     public void onCreate(Bundle savedInstanceState) {   
  19.            super.onCreate(savedInstanceState);   
  20.            setContentView(R.layout.main);   
  21.   
  22.            //定義UI組件   
  23.            Button b1 = (Button) findViewById(R.id.Button01);   
  24.            Button b2 = (Button) findViewById(R.id.Button02);   
  25.   
  26.            //定義ServiceConnection對象   
  27.            final ServiceConnection conn = new ServiceConnection() {   
  28.   
  29.                  @Override  
  30.                  public void onServiceConnected(ComponentName name, IBinder service) {   
  31.                  }   
  32.   
  33.                  @Override  
  34.                  public void onServiceDisconnected(ComponentName name) {   
  35.                  }   
  36.            };   
  37.   
  38.            //定義按鈕的單擊監聽器   
  39.            OnClickListener ocl = new OnClickListener() {   
  40.                  @Override  
  41.                  public void onClick(View v) {   
  42.                       Intent intent = new Intent(MainHelloSharedPreferences.this,   
  43.                             android.basic.lesson19.MusicService.class);   
  44.                       switch (v.getId()) {   
  45.                       case R.id.Button01:   
  46.                            Toast.makeText(getApplicationContext(), "Button01 onClick", Toast.LENGTH_LONG).show();   
  47.                            //綁定服務   
  48.                            bindService(intent,conn,Context.BIND_AUTO_CREATE);   
  49.                            break;   
  50.                       case R.id.Button02:   
  51.                            Toast.makeText(getApplicationContext(), "Button02 onClick", Toast.LENGTH_LONG).show();   
  52.                            //取消綁定   
  53.                            unbindService(conn);   
  54.                            break;   
  55.                       }   
  56.                  }   
  57.            };   
  58.   
  59.            //綁定單擊監聽器   
  60.            b1.setOnClickListener(ocl);   
  61.            b2.setOnClickListener(ocl);   
  62.   
  63.     }   
  64. }  

       6、運行程序,查看運行情況:

SharedPreference實例

SharedPreference實例

       查看File Explorer,在/data/data/android.basic.lesson19/shared_prefs/目錄下有一個MusicCurrentPosition.xml文件,點擊右上角的按鈕pull a file from the device,可以把這個xml文拷貝出來:

File Explorer

       7、查看MusicCurrentPosition.xml的內容,可以看到音樂播放進度的數據存貯在這個xml中:

XML/HTML代碼
  1. <?xml version='1.0' encoding='utf-8' standalone='yes' ?>  
  2. <map>  
  3. <int name="CurrentPosition" value="15177">  
  4. </int></map>  

       大家可以試著擴展下本實例,為Activity添加一個按鈕,點擊它實現的功能是取出SharedPreferences中的播放進度數據,顯示在另一個文本框Textview02裡。下面直接貼上最終的運行效果圖,至於程序,大家可以試著自己寫一下,更加深刻的理解Share,同一個進程中的不同組件是否都可以訪問此共享的持久化數據?這一點是不是與Cookie有些類似?

獲取SharedPreference中數據

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved