Android資料存放區技術五大方式總結

來源:互聯網
上載者:User

標籤:android   style   blog   http   color   使用   os   io   

本文介紹Android平台進行資料存放區的五大方式,分別如下:   

    1 使用SharedPreferences儲存資料

    2 檔案儲存體資料

    3 SQLite資料庫儲存資料

    4 使用ContentProvider儲存資料

    5 網路儲存資料

下面詳細講解這五種方式的特點

第一種: 使用SharedPreferences儲存資料

    適用範圍儲存少量的資料,且這些資料的格式非常簡單:字串型、基本類型的值。比如應用程式的各種配置資訊(如是否開啟音效、是否使用震動效果、小遊戲的玩家積分等),解鎖口令密碼等

    核心原理儲存基於XML檔案儲存體的key-value索引值對資料,通常用來儲存一些簡單的配置資訊。

                   通過DDMS的File Explorer面板,展開檔案瀏覽樹,很明顯SharedPreferences資料總是儲存在/data/data/<package name>/shared_prefs目錄下。

                   SharedPreferences對象本身只能擷取資料而不支援儲存和修改,儲存修改是通過SharedPreferences.edit()擷取的內部介面Editor對象實現。 SharedPreferences本身是一個介面,程式無法直接建立SharedPreferences執行個體,只能通過Context提供                    的getSharedPreferences(String name, int mode)方法來擷取SharedPreferences執行個體,該方法中name表示要操作的xml檔案名稱,第二個參數具體如下:

                   Context.MODE_PRIVATE: 指定該SharedPreferences資料只能被本應用程式讀、寫。

                   Context.MODE_WORLD_READABLE:  指定該SharedPreferences資料能被其他應用程式讀,但不能寫。

                   Context.MODE_WORLD_WRITEABLE:  指定該SharedPreferences資料能被其他應用程式讀,寫

                   Editor有如下主要重要方法:

                   SharedPreferences.Editor clear():清空SharedPreferences裡所有資料

                   SharedPreferences.Editor putXxx(String key , xxx value): 向SharedPreferences存入指定key對應的資料,其中xxx 可以是boolean,float,int等各種基本類型資料

                   SharedPreferences.Editor remove(): 刪除SharedPreferences中指定key對應的資料項目

                   boolean commit(): 當Editor編輯完成後,使用該方法提交修改

    實際案例:運行介面如下

                       

                  這裡只提供了兩個按鈕和一個輸入文字框,布局簡單,故在此不給出介面布局檔案了,程式核心代碼如下:         

class ViewOcl implements View.OnClickListener{        @Override        public void onClick(View v) {            switch(v.getId()){            case R.id.btnSet:                //步驟1:擷取輸入值                String code = txtCode.getText().toString().trim();                //步驟2-1:建立一個SharedPreferences.Editor介面對象,lock表示要寫入的XML檔案名稱,MODE_WORLD_WRITEABLE寫操作                SharedPreferences.Editor editor = getSharedPreferences("lock", MODE_WORLD_WRITEABLE).edit();                //步驟2-2:將擷取過來的值放入檔案                editor.putString("code", code);                //步驟3:提交                editor.commit();                Toast.makeText(getApplicationContext(), "口令設定成功", Toast.LENGTH_LONG).show();                break;            case R.id.btnGet:                //步驟1:建立一個SharedPreferences介面對象                SharedPreferences read = getSharedPreferences("lock", MODE_WORLD_READABLE);                //步驟2:擷取檔案中的值                String value = read.getString("code", "");                Toast.makeText(getApplicationContext(), "口令為:"+value, Toast.LENGTH_LONG).show();                                break;                            }        }            }

                 讀寫其他應用的SharedPreferences: 步驟如下

                1、在建立SharedPreferences時,指定MODE_WORLD_READABLE模式,表明該SharedPreferences資料可以被其他程式讀取

                2、建立其他應用程式對應的Context:

                    Context pvCount = createPackageContext("com.tony.app", Context.CONTEXT_IGNORE_SECURITY);這裡的com.tony.app就是其他程式的包名

                3、使用其他程式的Context擷取對應的SharedPreferences

                    SharedPreferences read = pvCount.getSharedPreferences("lock", Context.MODE_WORLD_READABLE);

                4、如果是寫入資料,使用Editor介面即可,所有其他動作均和前面一致。

               SharedPreferences對象與SQLite資料庫相比,免去了建立資料庫,建立表,寫SQL語句等諸多操作,相對而言更加方便,簡潔。但是SharedPreferences也有其自身缺陷,比如其職能儲存boolean,int,float,long和String五種簡單的資料類型,比如                  其無法進行條件查詢等。所以不論SharedPreferences的資料存放區操作是如何簡單,它也只能是儲存方式的一種補充,而無法完全替代如SQLite資料庫這樣的其他資料存放區方式。

 

第二種: 檔案儲存體資料

 核心原理: Context提供了兩個方法來開啟資料檔案裡的檔案IO流 FileInputStream openFileInput(String name); FileOutputStream(String name , int mode),這兩個方法第一個參數用於指定檔案名稱,第二個參數指定開啟檔案的模式。具體有以下值可選:

             MODE_PRIVATE:為預設操作模式,代表該檔案是私人資料,只能被應用本身訪問,在該模式下,寫入的內容會覆蓋原檔案的內容,如果想把新寫入的內容追加到原檔案中。可以使用Context.MODE_APPEND

             MODE_APPEND:模式會檢查檔案是否存在,存在就往檔案追加內容,否則就建立新檔案。

             MODE_WORLD_READABLE:表示當前檔案可以被其他應用讀取;

             MODE_WORLD_WRITEABLE:表示當前檔案可以被其他應用寫入。

             除此之外,Context還提供了如下幾個重要的方法:

             getDir(String name , int mode):在應用程式的資料檔案夾下擷取或者建立name對應的子目錄

             File getFilesDir():擷取該應用程式的資料檔案夾得絕對路徑

             String[] fileList():返回該應用資料檔案夾的全部檔案               

實際案例:介面沿用

             核心代碼如下:

public String read() {        try {            FileInputStream inStream = this.openFileInput("message.txt");            byte[] buffer = new byte[1024];            int hasRead = 0;            StringBuilder sb = new StringBuilder();            while ((hasRead = inStream.read(buffer)) != -1) {                sb.append(new String(buffer, 0, hasRead));            }            inStream.close();            return sb.toString();        } catch (Exception e) {            e.printStackTrace();        }         return null;    }        public void write(String msg){        // 步驟1:擷取輸入值        if(msg == null) return;        try {            // 步驟2:建立一個FileOutputStream對象,MODE_APPEND追加模式            FileOutputStream fos = openFileOutput("message.txt",                    MODE_APPEND);            // 步驟3:將擷取過來的值放入檔案            fos.write(msg.getBytes());            // 步驟4:關閉資料流            fos.close();        } catch (Exception e) {            e.printStackTrace();        }    }

      openFileOutput()方法的第一參數用於指定檔案名稱,不能包含路徑分隔字元“/” ,如果檔案不存在,Android 會自動建立它。建立的檔案儲存在/data/data/<package name>/files目錄,如: /data/data/cn.tony.app/files/message.txt,

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.