在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"



更多相关文章

  1. SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
  2. 一句话锁定MySQL数据占用元凶
  3. Android(安卓)网络连接 打开 Url下载 信息
  4. [Android(安卓)Pro] Android异步任务处理之AsyncTaskLoader的使
  5. android 右上角添加菜单
  6. 在Linux和windows下反编译Android(安卓).apk文件
  7. SharedPreferences保存文件及文件读取
  8. 【Android】ContentValues的用法
  9. Android烧录镜像文件介绍

随机推荐

  1. Umeng友盟的小问题 Unable to get provid
  2. VelocityTracker简介
  3. android使用百度地图获取自己所在的城市
  4. Android使用过程中的一些小知识
  5. android java 拷贝数据库文件到U盘,从U盘
  6. 编译android遇到java虚拟机堆内存不够的
  7. Android-将RGB彩×××转换为灰度图
  8. 一起学android之设置资源图片为圆角图片
  9. 新版3.6.1 Android Studio 解决AndroidSt
  10. 我的博客正式成立啦~