Android資料篇

來源:互聯網
上載者:User

標籤:資料存放區

Android提供了多種方式(XML檔案方式、檔案方式、資料庫方式等)進行資料的儲存。開發人員可以根據資料類型和設計的需要,選擇適當的儲存方式進行資料存放區。

1.XML檔案管理

        XML檔案更多的是用來維護應用或系統的設定檔。在Android中,goole提供了SharedPreferences這個輕型的儲存類作為XML檔案儲存體的上層介面,其本質上就是<ket, value>值對。

        根據配置資訊是否對其他應用開放,SharedPreferences提供了MODE_PRIVATE.、MODE_WORLD_READABLE兩種許可權。SharedPreferences的操作分為擷取配置資訊和儲存配置資訊兩種方式。下面是擷取配置資訊的方法:

                SharedPreferences settings=getSharedPreferences(PREFS_NAME,MODE_PRIVATE);

                boolean silent=settings.getBoolean("silentMode", false);

        儲存配置資訊和擷取配置資訊略有不同,下面是儲存配置資訊的方法:

                SharedPreference settings=getShatedPreferences(PREFS_NAME, MODE_PRIVATE);

                SharedPreference.Editor editor=settings.edit();            //獲得編輯器

                editor.putBoolean("silentMode", mSilentMode);

                editor.commit();          //提交

        如果希望配置資訊對其他應用開發,在設定許可權時,可使用MODE_WORLD_READABLE。在其他應用希望擷取相應的配置資訊時,必須先擷取相應的上下文,方法如下:

                context=createPackageContext("com.miaozl.text", Context.CONTEXT_IGNORE_SECURITY);

                if(context != null){

                        SharedPreference settings=context.getSharedPreference(PREFS_NAME,Context.MODE_WORLD_READABLE);

                        mTest=settings.getString("text", null);

                }

        需要說明的是,在PreferenceActivity中內建了對SharedPreferences的支援。

        如果希望ListPreference儲存或查看當前的選擇,可以調用的ListPreferences方法如下:

                public void setValue(String value)        //對應“android:entries”屬性的值

                public void setValueIndex(int index)        //對應“android:entryValues”屬性的值

                public String getValue()

        其他的Preference的操作方法類似於ListPreference。

2.內部檔案管理

        對於位元據,Android提供了內部儲存的方式,開發人員可以將資料存放區在應用的私人空間中,避免其他程式的訪問,內部儲存的資料會在應用卸載時刪除。

        內部儲存的實現非常簡單,其許可權包括MODE_PRIVATE、MODE_APPEND、MODE_WORLD_READABLE、MODE_WORLD_WRITEABLE等。

        內部儲存所在目錄為\data\data\com.company.packagename\files。如果檔案名稱為wors,其內部儲存的目錄為\data\data\com.android.mms\files\words。

        (1)寫入資料

                寫入字串資料的方法:

                        FileOutputStream out=context.openFileOutput(file,Context.MODE_WORLD_WRITEABLE);

                        out.write(captureArray.toString().getBytes());

                        out.close();

                寫入結構體資料的方法:

                        private static void writeConfiguration(Context context, LocaleConfiguration configuration){

                                DataOutputStream out = null;

                                out=new DataOutputStream(context.openFileOutput(PREFERENCES, MODE_PRIVATE));

                                out.writeUTF(configuration.locale);

                                out.writeInt(configuration.mcc);

                                out.writeInt(configuration.mnc);

                                out.flush();

                      }

        (2)讀取資料

                讀取字串資料的方法:

                        StringBuilder sb=new StringBuilder();

                        FileInputStream words=context.openFileInput("word");

                        int c;

                        while((c=words.read()) != -1){

                               if(c==‘\r‘ || c==‘\n‘){

                                       String word=sb.toString().trim();

                                        if(word.length() > 0){

                                                mWord.add(word);

                                        }

                                        sb.setLength(0);

                              }else{

                                      sb.append((char)c);

                              }

                     }

                     words.close();

                     mWordCount=mWords.size();

                讀取資料結構資料的方法:

                        private static void readConfiguration(Context context, LocaleConfiguration configuration){

                                DataInputStream in=null;

                                in=new DataInputStream(context.openFileInput(PREFERENCES));

                                configuration.locale=in,readUTF();

                                configuration.mcc=in.readInt();

                                configuration.mnc=in.readInt();

                                in.close();

                對於應用攜帶的待用資料,可以放置在應用的assets目錄或res、raw目錄下。

                對於assets目錄下的待用資料,存在單個檔案最大僅支援1MB的局限,讀取方式:InputStream is=getAssets().open("read_asset.txt");

                對於res、raw目錄下的待用資料,讀取方式:InputStream.inputStream=resources.openRawResource(R.raw.definitions);

                Android還對建立緩衝提供了支援,通過getCacheDir()可以擷取應用的緩衝路徑。在系統可用空間不足時,Android會清空緩衝,但對於開發人員而言,不應維護過多的緩衝。和內部儲存一樣,在應用卸載時,會清空並刪除緩衝目錄。

3.外部檔案管理

 

Android資料篇

聯繫我們

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