您的位置:华清远见教育科技集团 >> Android资料 >> Android Data Storage  
 
Android Data Storage
分享到:

对于现代的操作系统而言,如何访问数据、访问文件系统都是不可或缺的一部分,在Android中,上层应用访问数据和文件系统通常是基于内容提供器(Content Providers)的方式实现的。

Android在内容提供器之外还提供了4种机制,如参数选择(Preferences)、文件(Files)、数据库(Databases)、网络(Network)等来针对不同的数据类型执行操作。

其中参数选择机制主要用于配置< key,value>值,应用于应用程序内部配置运行参数信息等场景,如开机启动时的问候语、个性化设置等。在低端的操作系统中,此类数据一般存储在NVRAM中,在高端的操作系统中,则通常保存在文件系统中。

利用Context.getSharedPreferences()方法可以依据参数名以不同的模式提取出配置信息,提取模式包括MODE_PRIVATE 、MODE_WORLD_READABLE、MODE_WORLD_ WRITEABLE等。对于Activity私有的参数,则可以通过Activity.getPreferences()方法来提取参数。当需要在不同的应用间分享信息时,则需要借助内容提供器来进行。下面是一个实例:

代码1-1 SharedPreferences

import android.app.Activity;
    import android.content.SharedPreferences;
    public class Calc extends Activity
    {
    public static final String PREFS_NAME="MyPrefsFile";
        ...
        @Override
        protected void onCreate(Bundle state)
        {
            super.onCreate(state);
            . . .
            // 获取 参数
            SharedPreferences settings=getSharedPreferences(PREFS_NAME, 0);
            boolean silent=settings.getBoolean("silentMode", false);
            setSilent(silent);
        }
        @Override
        protected void onStop()
        {
            super.onStop();//保存参数
            SharedPreferences settings=getSharedPreferences(PREFS_NAME, 0);
            SharedPreferences.Editor editor=settings.edit();
            editor.putBoolean("silentMode", mSilentMode);//提交变化
            editor.commit();
        }
    }

由于复杂的数据,如GPS数据、Theme等,需要利用文件的方式进行存储。在Android中,对文件同样提供了强大的支持,通过Context.openFileInput()方法可以读文件,此方法在打开文件后会返回一个java.io.FileInputStream流对象供系统读取信息,通过Context.openFileOutput()方法可以写文件,此方法在打开文件后会返回一个java.io.FileOutputStream流对象供系统写入信息。如果操作的文件是在编译期生成并需要被放置在APK包中,则此类文件通常应放置在res/raw/myDataFile处,当需要读取时,可以通过Resources.openRawResource()方法进行读取,Resources.openRawResource()方法会返回一个java.io.InputStream供用户操作。

对于更复杂的数据,如电话簿、短消息、号码归属地等,通常会利用SQLite数据库的方式来提供更便利的创建、检索、存储支持。另外,Android还为SQLite数据库的一个封装即内容提供器,通过内容提供器可以更简洁的操作数据库,当然在性能上会略有下降。

在Android中,SQLite应放置在/data/data/package_name/databases_name目录下。如果是在线游戏或者云计算等,可以通过Android API(如java.net.*、android.net.*)在服务器端存储数据。

在Linux中,对于SQLite数据库文件即*.db,可以通过sqliteman图形界面工具来查看db文件。当然通过Sqlite3也可以在adb下通过命令行方式查看数据库数据。

在Android的帮助文档和示例中,对ContentProvider及其SQLiteDatabase都有比较丰富的描述,大家可以参阅。

 更多相关文章

·Android Content Providers
·Android App Widgets开发
·Android Intent激活组件
·Android Broadcast的使用
·详解Android Service组件