在Android开发中我们会接触到四种数据存储方式,每种存储方式都各有不同;以下eoe分别列举了Android开发中的不同存储方式的特点。
一,Preferences
Preferences是一个较轻量级的存储数据的方法,具体使用方法:
在A中保存值:
SharedPreferences.Editor sharedata = getSharedPreferences("data", 0).edit();
sharedata.putString("name","shenrenkui");
sharedata.commit();
在B中取值:
SharedPreferences sharedata = getSharedPreferences("data", 0);
String data = sharedata.getString("name", null);
Log.i(TAG,"data="+data);
注意:Context.getSharedPreferences(Stringname,inttype)的参数更我们在创建数据的时候的数据权限属性是一样的,存储和取值的过程这有点像HashMap但是比HashMap更具人性化,getXXX(Objectkey,ObjectdefualtReturnValue),第二个参数是当你所要的key对应没有时候返回的值。这就省去了很多逻辑判断。
二,Files
在Android上面没有的File就是J2se中的纯种File了,可见功能之强大,这里就算是走马观花地严重路过了。
//创建文件
file = new File(FILE_PATH , FILE_NAME);
file.createNewFile();
//打开文件file的OutputStream
out = new FileOutputStream(file);
String infoToWrite = "纸上得来终觉浅,绝知此事要躬行";
//将字符串转换成byte数组写入文件
out.write(infoToWrite.getBytes());
//关闭文件file的OutputStream
out.close();
//打开文件file的InputStream
in = new FileInputStream(file);
//将文件内容全部读入到byte数组
int length = (int)file.length();
byte[] temp = new byte[length];
in.read(temp, 0, length);
//将byte数组用UTF-8编码并存入display字符串中
display = EncodingUtils.getString(temp,TEXT_ENCODING);
//关闭文件file的InputStream
in.close();
} catch (IOException e) {
//将出错信息打印到Logcat
Log.e(TAG, e.toString());
this.finish();
}
//从资源读取
InputStream is=getResources().getRawResource(R.raw.文件名)
三.Databases
Android内嵌了功能比其他手机操作系统强大的关系型数据库sqlite3,我们在大学时候学的SQL语句基本都可以使用,我们自己创建的数据可以用adbshell来操作。具体路径是/data/data/package_name/databases。如,这里演示一下进入com.android.providers.media包下面的操作。
1,adbshell
2,cd/data/data/com.android.providers.media/databases
3,ls(查看com.android.providers.media下面的数据库)
4,sqlite3internal.db
5,.help---看看如何操作
6,.table列出internal数据中的表
7,select*fromalbums
DtabaseHelper mOpenHelper;
private static final String DATABASE_NAME = "dbForTest.db";
private static final int DATABASE_VERSION = 1;
private static final String TABLE_NAME = "diary";
private static final String TITLE = "title";
private static final String BODY = "body";
private static class DatabaseHelper extends SQLiteOpenHelper {
DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String sql = "CREATE TABLE " + TABLE_NAME + " (" + TITLE
+ " text not null, " + BODY + " text not null " + ");";
Log.i("haiyang:createDB=", sql);
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
/*
* 重新建立数据表
*/
private void CreateTable() {
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
String sql = "CREATE TABLE " + TABLE_NAME + " (" + TITLE
+ " text not null, " + BODY + " text not null " + ");";
Log.i("haiyang:createDB=", sql);
try {
db.execSQL("DROP TABLE IF EXISTS diary");
db.execSQL(sql);
setTitle(" 数据表成功重建");
} catch (SQLException e) {
setTitle("数据表重建错误");
}
}
/*
* 删除数据表
*/
private void dropTable() {
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
String sql = "drop table " + TABLE_NAME;
try {
db.execSQL(sql);
setTitle("数据表成功删除:" + sql);
} catch (SQLException e) {
setTitle("数据表删除错误");
}
}
/*
* 插入两条数据
*/
private void insertItem() {
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
String sql1 = "insert into " + TABLE_NAME + " (" + TITLE + ", " + BODY
+ ") values('haiyang', 'android的发展真是迅速啊');";
String sql2 = "insert into " + TABLE_NAME + " (" + TITLE + ", " + BODY
+ ") values('icesky', 'android的发展真是迅速啊');";
try {
Log.i("haiyang:sql1=", sql1);
Log.i("haiyang:sql2=", sql2);
db.execSQL(sql1);
db.execSQL(sql2);
setTitle(" 插入两条数据成功");
} catch (SQLException e) {
setTitle("插入两条数据失败");
}
}
/*
* 删除其中的一条数据
*/
private void deleteItem() {
try {
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
db.delete(TABLE_NAME, " title = 'haiyang'", null);
setTitle("删除title为haiyang的一条记录");
} catch (SQLException e) {
}
}
/*
* 在屏幕的title区域显示当前数据表当中的数据的条数。
*/
private void showItems() {
SQLiteDatabase db = mOpenHelper.getReadableDatabase();
String col[] = { TITLE, BODY };
Cursor cur = db.query(TABLE_NAME, col, null, null, null, null, null);
Integer num = cur.getCount();
setTitle(Integer.toString(num) + " 条记录");
}
四,Network
这是借助Internet来存储我们要的数据,这是CS结构的存储方式,也是点一下名了。
如何使用ContentProvider?
下边是用户经常接触到的几个典型ContentProvider应用:
*ContentProviderName:IntendedData
*Browser:Browserbookmarks,Browserhistory,etc.
*CallLog:Missedcalls,Calldatails,etc.
*Contacts:Contactdetails
*MediaStore:Mediafilessuchasaudio,VideoandImages
*Settings:DeviceSettingsandPreferences
调用ContentProvider资源的标准URI结构:
<standard_prefix>://<authority>/<data_path>/<id>
例如:
1)取得浏览器所有“书签”信息:content://browser/bookmarks
2)取得系统通讯录中的信息:content://contacts/people(如果取得某一个特定通讯记录,在路径URI的末端指定一个ID号:content://contacts/people/5
简单的实例片段:
Uri allCalls = Uri.parse("content://call_log/calls");
Cursor c = managedQuery(allCalls, null, null, null, null);
以下方法用于关闭当前应用:
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
manager.restartPackage(getPackageName());
需要权限:
"
Android.permission.RESTART_PACKAGES"
分享到:
相关推荐
Android保存数据的四种方法[借鉴].pdf
Android平台上四种保存数据的方法 Android平台上四种保存数据的方法
在Android开发中,有时候有些数据需要保存,在下次打开能够使用,那么如何保存呢?本资源通过一个例子使用SharedPreferences保存数据。
Android保存用户数据到手机内存中 http://blog.csdn.net/eeeduo/article/details/37831559
该项目主要功能是将数据写入到word中,需要的同志可以下载看看,项目中需要的jar包可在 http://download.csdn.net/detail/linzhenxiang123/9717253 进行下载
Android中内部文件保存读取,sd卡文件保存读取,首选项的保存和读取还有数据库的数据保存和读取。非常全
Android 的配置信息保存到本地并且查询出来显示。很基础哦,适合新手哦
Android 3种数据保存(SharedPreferences存储 内部文件存储 数据库存储),如项目包有问题请联系我谢谢
Android项目开发中使用的数据存储方式有:网络存储、sqlite存储、File存储和SharedPreferences存储,四种存储方式对应的Demo别人是NetworkDemo、SqliteDemo、FileDemo和SharedPreferencesDemo,根据应用的场景选择...
具体看这里 https://blog.csdn.net/u013519290/article/details/123795335
Android数据存储(非图片),将网络json数据系列化成对象,存储到内存和文件中。下一次直接从内存或者文件中获取数据,减少网络开销。
他的用法基本上和J2SE(java.util.prefs.Preferences)中的用法一样,以一种简单、 透明的方式来保存一些用户个性化设置的字体、颜色、位置等参数信息。一般的应用程序都会提供“设置”或者“首选项”的这样的界面,...
Android的SQLite中DateTime类型数据的存取问题
SQLite是一个轻量级的数据库,它能将数据保存到你的手机,但缺点是一旦软件卸载所有数据将一同被销毁。所以要根据自己的项目需要选择性的使用。下面要演示将SQLite中的数据提取出来。 首先定义一个类用来实例化...
android ini文件 sharePrefernces 保存数据
主要为大家详细介绍了Android存储字符串数据到txt文件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
Android 11 获取Gps 文件的
背景:在Android中按照数据保存的方式,可以分为如下几种Content Provider (用的SQLite实现),SQLite,SharedPreferences(用的XML实现),文件,网络等方式。今天在项目中,需要做一个永久保存的数据,保存到本地...
有需要可以看看,动态将想要的数据通过该接口直接写到本地文件
这里将摄像头采集及视频图像绘制放在一个模块中,比较便于管理及维护,同时在使用时,因为该类继承自view类,所以可以向操作很多view类一样,将其添加到任何布局中,在与采集的数据宽高比例保持一致的前提下,在页面...