文档章节

Android学习--10-数据存储

ssnoodles
 ssnoodles
发布于 2016/09/26 11:25
字数 502
阅读 6
收藏 0

文件存储

经典的流操作

模式

  • MODE_PRIVATE 默认,写入的内容会覆盖原文件
  • MODE_APPEND 存在即追加
  • MODE_WORLD_READABLE 4.2已弃用,有安全隐患
  • MODE_WORLD_WRITEABLE 同上

写入

openFileOutput()

public void save() {
String data = "Data to save";
FileOutputStream out = null;
BufferedWriter writer = null;
try {
out = openFileOutput("data", Context.MODE_PRIVATE);
writer = new BufferedWriter(new OutputStreamWriter(out));
writer.write(data);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (writer != null) {
writer.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}

自动保存到 /data/data/<项目id>/files/

写出

openFileInput()

public String load() {
FileInputStream in = null;
BufferedReader reader = null;
StringBuilder content = new StringBuilder();
try {
in = openFileInput("data");
reader = new BufferedReader(new InputStreamReader(in));
String line = "";
while ((line = reader.readLine()) != null) {
content.append(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return content.toString();
}

SharedPreferences 存储

键值对形式存储,xml形式格式。

模式

  • MODE_PRIVATE 只有当前应用程序可以操作
  • MODE_MULTI_PROCESS 也是只能当前,适用于多进程
  • MODE_WORLD_READABLE 4.2后弃用
  • MODE_WORLD_WRITEABLE 4.2后弃用

getSharedPreferences(文件名,模式)

SharedPreferences.Editor editor = getSharedPreferences("data",MODE_PRIVATE).edit();
editor.putString("name", "Tom");
editor.putInt("age", 28);
editor.putBoolean("married", false);
editor.commit();

存地址 /data/data/<项目id>/shared_prefs /

SharedPreferences pref = getSharedPreferences("data",MODE_PRIVATE);
String name = pref.getString("name", "");
int age = pref.getInt("age", 0);
boolean married = pref.getBoolean("married", false);

###SQLite 数据库存储 你懂的。

public class MyDatabaseHelper extends SQLiteOpenHelper {
//接收参数:String name, 数据库名称  int version 用于更新版本
public MyDatabaseHelper(Context context, String name, CursorFactoryfactory, int version){}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(sql语句);
}
//只有在version 变大时才执行
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
MyDatabaseHelper dbHelper = new MyDatabaseHelper(this, "BookStore.db", null, 1);
//这一步就创建数据库,和表结构了
SQLiteDatabase db = dbHelper.getWritableDatabase();

ContentValues values = new ContentValues();
values.put("name", "The Da Vinci Code");
values.put("author", "Dan Brown");
// C
db.insert("Book", null, values);
// U
db.update("Book", values, "name = ?", new String[] { "Tom" });
// D 
db.delete("Book", "name = ?", new String[] { "Tom" });
// R
//String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy)
Cursor cursor = db.query("Book", null, null, null, null, null, null);
while(cursor.moveToNext()){
	String name = cursor.getString(cursor.getColumnIndex("name"));
	int pages = cursor.getInt(cursor.getColumnIndex("pages"));
}
cursor.close();				    

当然你也可以自己写sql

db.execSQL("insert into Book (name, author, pages, price) values(?, ?, ?, ?)",
new String[] { "The Da Vinci Code", "Dan Brown", "454", "16.96" })

事务

db.beginTransaction(); // 开启事务

db.setTransactionSuccessful(); // 事务已经执行成功

db.endTransaction(); // 结束事务

跨程序取数据怎么办?

内容提供器( Content Provider) 下文学习

© 著作权归作者所有

ssnoodles
粉丝 2
博文 31
码字总数 9574
作品 0
张家港
私信 提问
Now in Android | 11 月刊 · 2019

作者 / Chet Haase, Android 开发技术推广工程师 欢迎大家来到 Now in Android 栏目,本栏目将专注于为开发者们提供近期值得关注的 Android 开发热点内容。 请务必跟上 Android 10 我们在 An...

谷歌开发者
2019/11/28
0
0
Android必备:Activity 活动 和 Intent 意图 的学习整理

看这里:Android必备:Activity 活动 和 Intent 意图 的学习整理 在Android必备:Android UI控件的了解与学习中,对AndroidUI做了初步的了解和学习,本篇继续进行Android开发学习的整理。And...

Realfighter
2015/03/04
491
0
Android中个人推崇的数据库使用方式

手机应用开发中经常会使用到数据库存储一些资料或者进行数据缓存,android中为我们提供了一个轻量的数据库,在上层进行了一层封装,同时还为我们提供了ContentProvider的框架,方便我们进行数...

码农明明
2014/10/15
1.3W
4
2015应届生求Android软件开发实习生职位

求职意向:Android软件开发 ★个人信息 性 别: 男 毕业时间: 2015.06 ★教育背景 Ø 2011.9--2015.6 东北电力大学 信息工程 学士 ★专业技能 Ø Ø 熟练掌握 JAVA 语言和编译环境,具有良好...

Mdany
2014/12/26
1.9K
18
Android 的数据存储方式

Android 提供了5种方式存储数据: --使用SharedPreferences存储数据; --文件存储数据; --SQLite数据库存储数据; --使用ContentProvider存储数据; --网络存储数据; 先说下,Preference,...

等待流星
2014/03/13
164
0

没有更多内容

加载失败,请刷新页面

加载更多

检查字符串是否不为空且不为空

如何检查字符串是否不为null也不为空? public void doStuff(String str){ if (str != null && str != "**here I want to check the 'str' is empty or not**") { /* handl......

javail
13分钟前
43
0
No module named 'apscheduler.schedulers'

关于 ModuleNotFoundError: No module named 'apscheduler.schedulers' 和 ModuleNotFoundError: No module named 'apscheduler' 的问题,网上有不少解决。大多数都是因为,文件起名与模块名......

開援带碼
34分钟前
53
0
如何查看Android的系统版本?

有谁知道我怎么能检查系统版本(例如1.0 , 2.2 ,等)编程? #1楼 我无法对答案发表评论,但是Kaushik的答案存在一个严重错误:SDK_INT与系统版本不同,但实际上是指API级别。 if(Build.VER...

技术盛宴
今天
35
0
引入AI变量,精准农业正在加速豹变?

  不久前,“江苏省脱贫率达 99.99%,尚未脱贫人数仅剩 6 户、17 人”这样一则新闻刷屏。“把这 17 个人迁出,江苏就全省脱贫”、“最后这 6 户人家拖了后腿”,在网民们的调侃和质疑声背后...

水果黄瓜
今天
41
0
Elasticsearch系列---结构化搜索

概要 结构化搜索针对日期、时间、数字等结构化数据的搜索,它们有自己的格式,我们可以对它们进行范围,比较大小等逻辑操作,这些逻辑操作得到的结果非黑即白,要么符合条件在结果集里,要么...

清茶豆奶
今天
69
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部