码迷,mamicode.com
首页 > 移动开发 > 详细

Android数据篇

时间:2015-06-17 18:17:24      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:数据存储

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数据篇

标签:数据存储

原文地址:http://blog.csdn.net/u011014707/article/details/46535215

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!