Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android 小項目之--數據存儲【Shared Preferences】(附源碼)

Android 小項目之--數據存儲【Shared Preferences】(附源碼)

編輯:Android開發實例

  任何一個應用程序都要依賴數據存儲,而且這種存儲必須不丟失數據,並且有效、簡便使用和更新這些數據。在 Android 操作系統中一共提供了4種數據存儲方式,但是由於存儲的這些數據都是私有的,所以如果需要共享其他應用程序的數據,就需要我們上篇文章說到的 Content Provider。4種數據存儲方式分別為如下:

  • 1、Shared Preferences。
    用來存儲 “鍵-值”格式的數據。
  • 2、Files。
    通過FileInputStream和FileOutputStream對文件進行操作。
  • 3、SQLite。
    標准數據庫,支持SQL語句。
  • NetWork。
    通過網絡存儲和獲取數據。

本篇中主要講述4種之一的Shared Preferences,因為在前幾篇己經有SQLite的用法做了簡單介紹,所以在以下的幾篇將會跳過SQLite的講解。下面開始講述Shared Preferences。主要內容如下:

  • 1、Shared Preferences 是什麼?
  • 2、如何使用 Shared Preferences 獲得數據?
  • 3、如何使用 Shared Preferences 保存數據?
    • 3.1、使用getPreferences方法創建文件的模式。
  • 4、模擬用戶參數設置。
  • 5、查看 Preferences 產生的文件。

1、Shared Preferences 是什麼?

Shared Preferences 類似於winform中做一些小型配置的ini文件,用來保存一些用戶設置的參數。例如,可以通過它保存上一次用戶所做的修改或者自定義參數設定,當再次啟動程序後依然保持原有設置。

 

2、如何使用 Shared Preferences 保存數據?

Shared Preferences提供了getPreferences方法來獲得Preferences對象,取得該對象了,即可以使用Editor取得編輯對象

 

3、如何使用 Shared Preferences 保存數據?


上文獲得Editor對象之後即可通過 Android 提供的各自操作函數進行數據提交,如:putBoolean()提交一個鍵值 為bool值的數據,最後通過commit方法保存這些數據。
 

      3.1、使用getPreferences方法創建文件的模式

在 Android系統提供的API中, 獲取 Preferences對象有四種類型,分別如下:

  • 文件創建模式:Activity.MODE_APPEND
    如果該文件已經存在,然後將數據寫入,而不是抹掉它現有文件的末尾。
     
  • 文件創建模式:MODE_PRIVATE
    默認模式,在那裡創建的文件只能由應用程序調用,即為私有的
     
  • 文件創建模式:Activity.MODE_WORLD_READABLE
    允許所有其他應用程序有讀取和創建文件的權限。
     
  • 文件創建模式:Activity.MODE_WORLD_WRITEABLE
    允許所有其他應用程序具有寫入、訪問和創建的文件權限。
     

本例中使用到了私有的文件創建模式,來獲取Preferences對象。

4、 模擬用戶參數設置

在模擬的例子中,我們放了一個復選框和一個文本顯示控件,然後通過播放音樂來達到模擬效果。當復選框選中時打開音樂,文本顯示控件顯示當前音樂為:打開,如果反選復選框則音樂停止,文本顯示控件顯示當前音樂為:關閉。如果你按下模擬器的返回按鈕退出的同時保存當前的狀態,如果復選框選中則一打開程序立刻播放音樂,反之則不播放音樂。代碼如下:

 

音樂播放示例代碼 package com.terry;
 
import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.KeyEvent;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.TextView;
import android.widget.CompoundButton.OnCheckedChangeListener;

public class sharedPreActivity extends Activity {
    private TextView myTextView;
    private CheckBox myBox;
    private playMusic PLAYER=null;
    private boolean isplay=false;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        myTextView=(TextView)findViewById(R.id.TextView01);
        
        myBox=(CheckBox)findViewById(R.id.CheckBox01);
        PLAYER=new playMusic(this); 
        /*
         * 文件創建模式:Activity.MODE_APPEND
         * 如果該文件已經存在,然後將數據寫入,而不是抹掉它現有文件的末尾。
         */ 
        /*
         * 文件創建模式:MODE_PRIVATE
         * 默認模式,在那裡創建的文件只能由應用程序調用,即為私有的
         */ 
        /*
         * 文件創建模式:Activity.MODE_WORLD_READABLE
         * 允許所有其他應用程序有讀取和創建文件的權限。
         */
        /*
         * 文件創建模式:Activity.MODE_WORLD_WRITEABLE
         * 允許所有其他應用程序具有寫入、訪問和創建的文件權限。
         */
        SharedPreferences settings=getPreferences(Activity.MODE_PRIVATE);
        
        isplay=settings.getBoolean("isplay", false); //通過key值找到value,如果不存在即返回false
        myBox.setChecked(isplay);
        if(isplay){
            
            myTextView.setText("當前音樂的播放狀態:開");
            isplay=true;
            PLAYER.Play();
        }
        else{
            myTextView.setText("當前音樂的播放狀態:關");
        }
       
        myBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
            
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                // TODO Auto-generated method stub
                if(isChecked)
                {
                    myTextView.setText("當前音樂的播放狀態:開");
                    isplay=true;
                    PLAYER.Play();
                }
                else{
                    myTextView.setText("當前音樂的播放狀態:關");
                    isplay=false;
                    PLAYER.FreeMusc();
                }
            }
        });
        
    }
    
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        // TODO Auto-generated method stub
        if(keyCode==KeyEvent.KEYCODE_BACK){
            SharedPreferences uiState=getPreferences(0);
            SharedPreferences.Editor editor=uiState.edit();
            editor.putBoolean("isplay", isplay);
            editor.commit();
            if(isplay)
            {
                PLAYER.FreeMusc();
            }
            this.finish();
            return true;
        }
            
        return super.onKeyDown(keyCode, event);
    }
    
    
    
    
    
}

 

 其中,settings.getBoolean提供了兩個參數,第一個參數為鍵值,第二個則為默認值。當通過鍵值獲取空數據時,則返回第二個參數。

以上代碼的音樂播放類如下:

package com.terry;

import java.io.IOException;

import android.content.Context;
import android.media.MediaPlayer;

public class playMusic {

    public MediaPlayer music=null;
    private Context myContext;
    
    public playMusic(Context cc)
    {
        myContext=cc;
    }
    
    public void Play()
    {
         
            music=MediaPlayer.create(myContext, R.raw.start);
        
            music.setLooping(true);
            try {
                music.prepare();
            } catch (IllegalStateException e) {
                // TODO: handle exception
                e.printStackTrace();
            }
            catch (IOException e) {
                // TODO: handle exception
                e.printStackTrace();
            }
            music.start();
         
         
    }
    
    public void FreeMusc()
    {
        if(music!=null)
        {
            music.stop();
            music.release();
        }
    }
}

 

 

5、查看 Preferences 產生的文件

通過上面的例子和代碼的實現,己經實現了我們當初期望得到的效果,如果說它像winform中的ini文件,那麼它就會創建在一個地方咯。沒錯,下面我們就來找到它。

在每安裝一個Android 應用程序時,data/data目錄下都會產生一個文件夾,如果應用程序中使用了 Preferences 則會在該應用程序文件夾下產生一個shared_prefs文件夾,我們產生的文件正安靜的躺在那裡等著我們呢。。。。(YY中。。。),查看步驟要求:

  • 必須啟動模擬器,運行程序。
  • 在 你使用的IDE中切換到DDMS視圖,選擇File Explorer標簽。注意:如果你的File Explorer裡面沒有任何東西,請根據此步驟找回--》DDMS-在Devices標簽中選擇

    點擊Reset adb即可將你的 File Explorer還原。
  • 找到/data/data目錄中對應的項目文件夾下的shared_prefs文件夾
     

 

好了,今天的數據存儲就講到這裡,例子的運行圖如下:

源碼下載:/Files/TerryBlog/sharedPreDemo.rar

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