数据存储是每个项目必备技能,在Android中,可供选择的存储方式有SharedPreferences、文件存储、SQLite数据库方式、内容提供者(Content provider)和网络。对于内容提供者使用方面比较少,因此这里就不做介绍了,下面介绍其它四个比较常用的存储方式。
haredPreferences是android中最容易理解的数据存储技术,实际上SharedPreferences处理的就是一个key-value(键值对)SharedPreferences常用来存储一些轻量级的数据。
1、使用SharedPreferences保存数据方法如下:
//实例化SharedPreferences对象(第一步)
SharedPreferences mySharedPreferences= getSharedPreferences("test",
Activity.MODE_PRIVATE);
//实例化SharedPreferences.Editor对象(第二步)
SharedPreferences.Editor editor = mySharedPreferences.edit();
//用putString的方法保存数据
editor.putString("name", "Karl");
editor.putString("habit", "sleep");
//提交当前数据
editor.commit();
2、使用SharedPreferences读取数据方法如下:
//同样,在读取SharedPreferences数据前要实例化出一个SharedPreferences对象
SharedPreferencessharedPreferences= getSharedPreferences("test",
Activity.MODE_PRIVATE);
// 使用getString方法获得value,注意第2个参数是value的默认值
String name =sharedPreferences.getString("name", "");
String habit =sharedPreferences.getString("habit", "");
文件存储:
Android中可以在设备本身的存储设备或外接的存储设备中创建用于保存数据的文件。在默认状态下,文件是不能在不同程序间共享的。当用户卸载您的应用程序时,这些文件删除。文件存储数据可以通过openFileOutput方法打开一个文件(如果这个)文件不存在就自动创建这个文件),通过load方法来获取文件中的数据,通过deleteFile方法删除一个指定的文件。
File是通过FileInputStream和FileOutputStream对文件进行操作。
Context提供了如下两个方法来打开本应用程序的数据文件将爱丽的文件IO流。
FileInputStream openFileInput(String name):
打开应用程序的数据文件夹下的name文件对应输入流。
FileOutputStream openFileOutput(String name,int mode):
打开应用程序的数据文件夹下的name文件对应输出流。
参数:mode 指定打开文件的模式,该模式支持如下值:
MODE_PRIVATE :该文件只能被当前程序读写。
MODE_APPEND:以追加方式打开该文件,应用程序可以向该文件中追加内容。
MODE_WORLD_READABLE:该文件的内容可以被其他应用程序读取。
MODE_WORLD_WRITEABLE:该文件的内容可由其他程序读、写。
//读取的内容会随着文件的改变而改变
try{
//读取的是字节流
InputStream is=getResources().getAssets().open("info.txt");
//UTF-8编码的指定是很重要的
InputStreamReader isr=newInputStreamReader(is,"UTF-8");
BufferedReader bfr=newBufferedReader(isr);
String in="";
while((in=bfr.readLine())!=null)
{
Log.i(TAG, in);
}
// Log.i(TAG, bfr.readLine());
}catch(IOException e) {
e.printStackTrace();
}
try{
//将文件数据写到应用的内部存储
/*
* 注意:获取流的方式通过openFileInput函数,指定文件名以及后缀
* 参数1.文件名和后缀 2.文件模式
* 保存在手机data/data/包名/files
* */
FileOutputStream fos=openFileOutput(fileName, Context.MODE_PRIVATE);
OutputStreamWriter osw=newOutputStreamWriter(fos,"UTF-8");
osw.write(et.getText().toString());
//保证输出缓冲区中的所有内容
osw.flush();
fos.flush();
//后打开的先关闭,逐层向内关闭
fos.close();
osw.close();
Toast.makeText(MainActivity.this,"写入完成", Toast.LENGTH_LONG).show();
}catch(FileNotFoundException e) {
e.printStackTrace();
}catch(UnsupportedEncodingException e) {
e.printStackTrace();
}catch(IOException e) {
e.printStackTrace();
}
数据库:
Android 在运行时(run-time)集成了 SQLite,所以每个 Android 应用程序都可以使用 SQLite 数据库。对于熟悉 SQL 的开发人员来时,在 Android 开发中使用 SQLite 相当简单。但是,由于 JDBC 会消耗太多的系统资源,所以 JDBC 对于手机这种内存受限设备来说并不合适。因此,Android 提供了一些新的 API 来使用 SQLite 数据库,Android 开发中,程序员需要学使用这些 API。
publicclassDatabaseHelperextendsSQLiteOpenHelper {
DatabaseHelper(Context context, String name, CursorFactory cursorFactory,intversion)
{
super(context, name, cursorFactory, version);
}
@Override
publicvoidonCreate(SQLiteDatabase db) {
// TODO 创建数据库后,对数据库的操作
}
@Override
publicvoidonUpgrade(SQLiteDatabase db,intoldVersion,intnewVersion) {
// TODO 更改数据库版本的操作
}
@Override
publicvoidonOpen(SQLiteDatabase db) {
super.onOpen(db);
// TODO 每次成功打开数据库后首先被执行
}
}
网络:
可以使用网络来保存数据,在需要的时候从网络上获取数据,进而显示在App中。用网络保存数据的方法有很多种,对于不同的网络数据采用不同的上传与获取方法。简单说也就是自己项目中网络请求时所做的事情,进行数据上传,数据获取然后解析,这里推荐一下我的Json数据解析
http://blog.csdn.NET/greatdaocaoren/article/details/73826711
其实在实际项目中,根据自己的需要自己的目标而制定自己的数据存储方式,这里只是简单介绍一下,具体还是得根据项目来,下面给出demo,不懂的可以下载运行和查看代码:
http://download.csdn.net/detail/greatdaocaoren/9913670
csdn项目地址:http://blog.csdn.net/greatdaocaoren/article/details/76252514