android——利用SharedPreference做引導介面

來源:互聯網
上載者:User

很久以前就接觸過sharedPreference這個android中的儲存介質。但是一直沒有實際使用過,今天在看之前做的“民用機型大全”的app時,突然想到可以使用sharedPreference類來改進這個app中的一個缺陷。   
此前,我先介紹sharedPreference的使用。
Android資料總共有四種儲存的方式   
   一、SharePreference
  二、SQLite   
  三、File   
  四、ContentProvider

SharedPreference類是一個輕量級的儲存類,特別適合儲存軟體的配置參數。SharedPreference實際上是產生一個xml檔案來存放資料,這個xml檔案產生以後的存放位置在“/data/data/<package name>/shared_prefs”目錄下。
SharedPreference類的使用流程如下:   
  一、擷取SharedPreference類的執行個體化對象   
  二、擷取Editor對象用於編輯SharedPreference類執行個體  
  三、利用Editor添加(修改)資料   
  四、使用commit()提交事務   

一、擷取SharedPreference類的執行個體化對象   
  擷取SharedPreference類執行個體化的對象的方法有兩種
  (1)Context.getSharedPreferences(String name,int mode)    
  參數解析:   
    a)name是SharedPreference產生的xml檔案的檔案名稱,假設參數name處填寫為“firstTest”,那麼代碼執行後SharedPreference將產生一個firstTest.xml檔案。這個xml採用鍵-值對的形式儲存參數。   
    b) mode是建立模式,是設定SharedPreference的儲存的模式,總共有四種參數:    
      Context.MODE_PRIVATE: 預設的操作模式,代表檔案是私人資料,只能被本地應用訪問    
      Context.MODE_APPEND: 檢查檔案是否存在,存在則往檔案中追加內容,否則建立新檔案    
      Context.MODE_WORLD_READABLE:   當前檔案可被其他應用程式讀取    ·
      Context.MODE_WORLD_WRITEABLEs:   當前檔案可被其他應用程式寫入
  (2)Activity.getPreferences(int mode)   
  這種方式下,name是通過getLocalClassName()得到的,不能讓我們自己設定,而且最終會調到ContextWrapper的getSharedPreferences()        
  推薦使用第一種方法擷取SharedPreference類的執行個體化對象

二、擷取Editor對象    
  SharedPreferences對象本身只能擷取資料而不支援儲存和修改,儲存修改是通過Editor對象實現。具體實現如下
SharedPreferences sp = ctx.getSharedPreferences("Test", MODE_PRIVATE);  
Editor editor = sp.edit();
三+四、利用Editor添加(修改)資料+使用commit()提交事務     
  Editor中內建了一些常用變數的寫入函數(使用鍵-值對),方便儲存資料,儲存完資料之後,一定要使用commit()函數提交事務,才能完成資料的儲存,具體實現如下:        
editor.putString("STRING_KEY", "string");        editor.putInt("INT_KEY", 0);        editor.putBoolean("BOOLEAN_KEY", true);        editor.commit();

通過SharedPreference類,我們就可以實現【使用者引導功能】只在第一次進入app時執行。具體實現如下:
/** * 該類是進入app的第一個介面,顯示開啟app的動畫 * @author LiXuetao */public class startAnimationActivity extends Activity {    public static final int SKIP_GUIDE = 0x001;    public static final int SKIP_MAIN = 0x002;    SharedPreferences sharedPreferences;     //該線程用於延遲跳轉activity    Thread thread;    //判斷是否第一次開啟該應用    Boolean b;        @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_startanimation);        /**         * context.getgetSharedPreferences(String name, int mode) 擷取sharedPreference對象         * name是sharedPreference產生的xml檔案的名字         */        sharedPreferences = getSharedPreferences("test", Context.MODE_PRIVATE);        thread = new Thread(runnable);        thread.start();    }    //此handler用於處理介面的變換(跳轉activity)    Handler handler = new Handler(){        public void handleMessage(android.os.Message msg) {            switch (msg.what) {            case SKIP_GUIDE:                Intent guideIntent = new Intent(startAnimationActivity.this, guideActivity.class);                startActivity(guideIntent);                break;            case SKIP_MAIN:                Intent mainIntent = new Intent(startAnimationActivity.this, MainActivity.class);                startActivity(mainIntent);                break;            }        };    };        Runnable runnable = new Runnable() {        @Override        public void run() {            // TODO Auto-generated method stub            try {                //getBoolean(String key, boolean defValue) 擷取鍵isFirst的值,若無此鍵則擷取預設值(第一次開啟程式的時候沒有isFirst這個鍵)                b = sharedPreferences.getBoolean("isFirst", true);                Message msg = handler.obtainMessage();                if(b){                    //Editor對象用於修改sharedpreference對象,修改完後必須提交事務,才能完成修改(參考資料庫的交易處理)                    Editor editor = sharedPreferences.edit();                    editor.putBoolean("isFirst", false);                    editor.commit();                    msg.what = SKIP_GUIDE;                }else{                    msg.what = SKIP_MAIN;                }                //休眠3s後,將資訊發給handler,由handler來跳轉activity                Thread.sleep(3000);                handler.sendMessage(msg);            } catch (InterruptedException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }        }    };}/** * 該類是app的主介面 * @author LiXuetao * */public class MainActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.main, menu);        return true;    }}/** * 該類是app的引導介面,只在app第一次啟動時執行 * @author LiXuetao */public class guideActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_guide);    }    }

以上就是app第一次啟動時進入guide介面的具體實現代碼。
  我最開始說的機型大全的APP存在的問題是由於該APP的資料庫是外部匯入的,所以每次修改資料庫都要重新匯入資料庫,否則就會資料就會按照上個版本的資料庫顯示。當時我實在想不出辦法來,只好在每次開啟app的時候只要檢測到資料庫存在就刪了它,然後重新匯入app。
現在有了sharedPreference,就可以實現只在第一次啟動app時刪除原先的資料庫,匯入新的資料庫了。   完了,我要去改代碼了~~~

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.