Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android開發入門:SharedPreferences擴展以及File

Android開發入門:SharedPreferences擴展以及File

編輯:Android開發實例

  在前一篇文章已經講過Android的數據存儲:SharedPreferences 詳情請見: http://www.fengfly.com/plus/view-212772-1.html .今天把SharedPrefrences的數據共享性體現出來。

Q: SharedPreferences 如何體現數據共享?或者說如何才能讀,寫其它應用的SharedPreferences呢?

答:有二種方式可以訪問並且進行讀寫其它應用的SharedPreferences.

    1. 對xml進行操作!這是由其特性決定! 因為SharedPreferences文件是統一存放在/data/data/your_package_name/shared_prefs目錄,並且它的文件格式是xml,因此我們完全可以采用對xml解析的方式對它進行操作。此種與解析一般xml格式文件沒有任何區別,會解析xml就行!這種方式比較繁瑣並且不能體現SharedPreferences的優勢,不推薦!
    2. 對創建的SharedPreferences指定權限,比如把mode設置為MODE_WORLD_READABLE,表明可以被其它程序讀取,設置為MODE_WORLD_WRIATABLE,表明可以被其它程序寫入。具體的步驟如下:
      1. 獲其對應App的context。
        Context anther_app = createPackageContext("your_app_package_name",int flags);
      2. 獲得SharedPreferences對象。
        SharedPreferences  spfPreferences = anther_app.getSharedPreferences(fileName, int MODE);
      3. 接下來的操作就是單純SharedPreferences方法的使用了,詳情可以參照:http://www.fengfly.com/plus/view-212772-1.html

通常采用這種方式進行數據共享不推薦,Android專門提供一套API來用於數據共享:ContentProvide  這個以後在講。

  2. Q: SharedPreferences默認只能存儲基本數據類型及String或Set,可以存儲復雜的對象數據類型嗎?

答:可以。 SharedPreferences默認之所以只能存儲基本數據類型及String或Set,是因為它提供的putXXX系列方法有限,如果要存復雜類型的數據,可以這樣操作。

    • 假如有個Person類(包含name,age,address屬性)需要存儲,可以分成三步:第一步就是把使用對象序列化技術對Person對象進行操作;第二步就是把它轉換成Base64編碼;第三步就是使用SharedPreferences.Editor對象並且調用putString方法。代碼請見下方:
  1. Person p = new Person();  
  2.  p.setName("dylan");  
  3.  p.setAge(24);  
  4.  p.setAddress("China");  
  5.    
  6.  ByteArrayOutputStream baos = new ByteArrayOutputStream();  
  7.  ObjectOutputStream oos = new ObjectOutputStream(baos);  
  8.  oos.writeObject(p);  
  9.    
  10.  SharedPreferences spfPreferences = getSharedPreferences(fileName, MODE_PRIVATE);  
  11.  //把Person轉換成byte數組。  
  12.  String p_base64 = new String(Base64.encodeBase64(baos.toByteArray()));  
  13.    
  14.  SharedPreferences.Editor editor = spfPreferences.edit();  
  15.  editor.putString("person",p_base64);  
  16.  editor.commit(); 

 

 

  這種方法就是添加一層包裝把對象轉換成byte數組並且進行Base64編碼,到最後還是調用了putString方法。

文件的存儲:

  文件的存儲很簡單,基本上就是IO流的操作,查看此文了解IO流:http://www.fengfly.com/plus/view-212748-1.html

  文件的存儲需要這二個類: InputStream,OutputStream

1 InputStream ins = openFileInput(String filename) ;
2 // filename: The name of the file to open; can not contain path separators
3 
4 OutputStream ons = openFileOutput(String filename,int mode);

 

  1. 文件存儲的文件格式不必是xml,可以是任何擴展名;
  2. 文件存儲在手機內存中,路徑為:/data/data/your_package_name/files目錄。

我們知道手機內存存儲是有限的,那麼如何存放在SDCard中去呢?

  1. 判斷手機是否安裝sdcard。如果返回true,則有安裝!!!

 Environment.getExternalStorageState.equals(Environment.MEDIA_MOUNTED);

  2. 為AndroidManifest.xml添加uses-permission

  3. Environment.getExternalStorageDirectory獲取SD卡的目錄;也可以使用:/mnt/sdcared

    Note: /mnt目錄: linux默認掛載外部設備都會掛到這個目錄下面,如將sd卡掛載上去後,會生成一個/mnt/sdcard 目錄。有時候會看到/sdcard目錄,其實這個目錄與/mnt/sdcard目錄是一樣的,因為/sdcard是個軟鏈接(類似Windows的桌面快捷方式)而以;

  4. 完全的IO流操作。

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