天天看點

SharedPreferences小細節

    廢話不多講,直接入題:以下,SharedPreferences小馬就簡稱SP了:

   SP一般建議在全局檔案中操作,即:在繼承Application的擴充類中操作,這樣做的原因是SP隻是為了存儲一些應用及遊戲配置,并不能存儲大量資料,而且操作次數也不會太過頻繁,是以建議在全局中操作和使用哦:

先來看下效果圖:主要看效果圖下面的講解,嘿嘿

<a href="http://blog.51cto.com/attachment/201112/064208309.png" target="_blank"></a>

<a href="http://blog.51cto.com/attachment/201112/064228921.jpg" target="_blank"></a>

<a href="http://blog.51cto.com/attachment/201112/064246507.jpg" target="_blank"></a>

将XML檔案導出後的結果如下圖:

<a href="http://blog.51cto.com/attachment/201112/064538565.jpg" target="_blank"></a>

package com.mzh.www; 

import android.app.Activity; 

import android.content.Context; 

import android.content.Intent; 

import android.content.SharedPreferences; 

import android.os.Bundle; 

import android.preference.Preference; 

import android.preference.PreferenceActivity; 

import android.preference.PreferenceManager; 

import android.view.View; 

import android.view.View.OnClickListener; 

import android.widget.Button; 

import android.widget.EditText; 

import android.widget.Toast; 

/**   

* @Title: SharedPreferencesDemo.java 

* @Package com.mzh.www 

* @Description: SharedPreferences資料存儲測試 

* @author mzh 

* @version V2.2 

*/ 

public class SharedPreferencesDemo extends Activity { 

    //聲明 

    private EditText XM ; 

    private EditText NL ; 

    private EditText SG ; 

    private Button saveBtn ; 

    private Button cancelBtn; 

    //SharedPreferences 

    //SP檔案名 

    private static final String PREFERENCES_NAME = "XiaoMa_Guo"; 

    /** 

     * 存儲模式: 

     * 有四種模式,如果疊加模式可用以下寫法,小馬此例中僅疊加兩種 

     * MODE_PRIVATE   預設的模式,一般情況下使用 

     * MODE_WORLD_READABLE  全局讀 

     * MODE_WORLD_WRITEABLE 全局寫 

     * MODE_MULTI_PROCESS 多程序間通路使用 

     * 以上模式中全局指在任何地方都可以通路,至于操作得看是可以讀 還是可以寫啦  

     */ 

    private static final int PREFERENCES_MODE  

                             = Context.MODE_WORLD_READABLE 

                             +Context.MODE_WORLD_WRITEABLE; 

    /** Called when the activity is first created. */ 

    @Override 

    public void onCreate(Bundle savedInstanceState) { 

        super.onCreate(savedInstanceState); 

        setContentView(R.layout.main); 

        //資源定位 

        XM = (EditText)findViewById(R.id.XM); 

        NL = (EditText)findViewById(R.id.NL); 

        SG = (EditText)findViewById(R.id.SG); 

        //添加監聽 

        saveBtn = (Button)findViewById(R.id.Save); 

        cancelBtn = (Button)findViewById(R.id.Cancel); 

        saveBtn.setOnClickListener(listener); 

        cancelBtn.setOnClickListener(listener); 

    } 

     * 監聽哭實作 

    private OnClickListener listener = new OnClickListener() { 

        @Override 

        public void onClick(View v) { 

            // TODO Auto-generated method stub 

            switch (v.getId()) { 

            case R.id.Save: 

                saveSharedPreferences(); 

                break; 

            case R.id.Cancel: 

                finish(); 

            default: 

            } 

        } 

        /** 

         * 實作往SP中存值 

         */ 

        private void saveSharedPreferences() { 

            //這個地方取SP檔案的方式有兩種: 

            //方法一如下:    

            //這種方式是取得指定的那個SP檔案 

            SharedPreferences sharedPreferences =  

                         getSharedPreferences(PREFERENCES_NAME, PREFERENCES_MODE); 

            //下面貼下getSharedPreferences方法的源碼: 

            /**小馬英語一般,剛看這個很怕,但可以借助工作查嘛,朋友們也可以自己嘗試下翻譯它 

             * Retrieve and hold the contents of the preferences file 'name', returning 

             * a SharedPreferences through which you can retrieve and modify its 

             * values.  Only one instance of the SharedPreferences object is returned 

             * to any callers for the same name, meaning they will see each other's 

             * edits as soon as they are made. 

             * 

             * @param name Desired preferences file. If a preferences file by this name 

             * does not exist, it will be created when you retrieve an 

             * editor (SharedPreferences.edit()) and then commit changes (Editor.commit()). 

             * @param mode Operating mode.  Use 0 or {@link #MODE_PRIVATE} for the 

             * default operation, {@link #MODE_WORLD_READABLE} 

             * and {@link #MODE_WORLD_WRITEABLE} to control permissions. 

             * @return Returns the single SharedPreferences instance that can be used 

             *         to retrieve and modify the preference values. 

             * @see #MODE_PRIVATE 

             * @see #MODE_WORLD_READABLE 

             * @see #MODE_WORLD_WRITEABLE 

             * 寫這麼一大段,意思一句總結,就是有多個SP檔案存在時,可以用指定的SP檔案名與模式取SP檔案,簡單吧?而且這個裡面的檔案 

             * 名可以自定義,如果檔案不存在,它會自動建立的啦,如:XiaoMaGuo.xml 

             * SharedPreferences aPrefs = getSharedPreferences("XiaoMaGuo", 0); 

            public abstract SharedPreferences getSharedPreferences(String name, 

                    int mode); 

             */ 

            /*//方法二如下: 

            //這種方式是取得預設的那個SP檔案 

            sharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);*/ 

            //下面貼段源碼,加深上PreferenceManager方式的了解: 

            /** 

             * Used to help create {@link Preference} hierarchies 

             * from activities or XML. 

             * &lt;p&gt; 

             * In most cases, clients should use别的先不看,這句意思:在有多個分支,或者說多個SP檔案時 

             * {@link PreferenceActivity#addPreferencesFromIntent} or 這個的意思是:從比對的Intent中加載SP檔案 

             * {@link PreferenceActivity#addPreferencesFromResource(int)}.這個意思是:通過指定的XML檔案,将加載此 

             * XML檔案到目前SP層級中,也就是把指定的XML檔案加載到目前的配置中來,吼吼 

             *  

             * @see PreferenceActivity 

            public class PreferenceManager {*/ 

            //取編輯對象的方法一樣 

            SharedPreferences.Editor editor = sharedPreferences.edit(); 

                if( 

                    !"".equals(XM.getText().toString()) 

                    &amp;&amp;!"".equals(NL.getText().toString()) 

                    &amp;&amp;!"".equals(SG.getText().toString()) 

                  ){ 

                    editor.putString("Name", XM.getText().toString()); 

                    editor.putInt("Age", Integer.parseInt(NL.getText().toString())); 

                    editor.putFloat("Height", Float.parseFloat(SG.getText().toString())); 

                    editor.commit(); 

                    Toast.makeText(SharedPreferencesDemo.this, "資料儲存成功!", 

                          Toast.LENGTH_LONG).show(); 

                    Intent intent = new Intent(SharedPreferencesDemo.this,ShowPreferences.class); 

                    startActivity(intent); 

                }else{ 

                    Toast.makeText(SharedPreferencesDemo.this, "資料不完整,儲存失敗!", Toast.LENGTH_LONG).show(); 

                } 

    }; 

        最後,小馬會把自己的DEMO上傳到附件,供跟小馬處于同一起跑線上的朋友們學習使用,但不要COPY哦,自己敲一遍就記得比較清楚啦,吼吼, 小馬剛開始寫文章,如果有錯誤的地方,請直接批評指出,批評就是對我最好的提高,最後,謝謝看文章的你給小馬多提些建議,小馬有錯的地方肯定不含糊,絕對會改正,謝謝

<a href="http://down.51cto.com/data/2359525" target="_blank">附件:http://down.51cto.com/data/2359525</a>

     本文轉自華華世界 51CTO部落格,原文連結:http://blog.51cto.com/mzh3344258/747124,如需轉載請自行聯系原作者