Content保存数据到文件使用共享首选项 (Shared Preferences)序列化sqlite数据库 保存数据到文件 在Android
在Android设备中什么是internal和external存储区?
internal,内部存储区,不易失,保存的文件是 app 私有的 external,外部存储区,分为可移除和内部分区,不是总可用的,不具有保密性 (world-readable)默认情况下,app是安装在哪种存储区中?如何改变到其他存储区?
internal 可通过清单文件中的android:installLocation
属性更改
internal存储区的目录结构通常是怎样的?
通常为data/data/app_name/
在internal存储区存放文件的时候,通过哪些方法获取内部存储的目录对象?对文件操作及流操作模糊的同学请回到java复习相关知识
getFilesDir() 返回一个代表 internal 目录的 File 对象
getDir(name,mode) 在 internal 目录中创建或者打开一个目录
getCacheDir() 返回一个用于存放你的 app 临时 缓存文件的 internal 目录
File file = new File(getApplicationContext().getFilesDir(), filename);
向internal存储区写文件的代码模板是怎么样的?请理解。
public void save(View view) {
EditText et_input = (EditText) findViewById(R.id.et_input);
String content = et_input.getText().toString();
String filename = "data.txt";
FileOutputStream fos;
try {
fos = openFileOutput(filename, Context.MODE_PRIVATE);
fos.write(content.getBytes());
fos.close();
Toast.makeText(this, getString(R.string.success), Toast.LENGTH_SHORT).show();
} catch (IOException e) {
e.printStackTrace();
}
}
从internal存储区读文件的代码模板是怎样的?请理解。
byte[] buffer = new byte[fis.available()]; //测试 byte 数组的大小
fis.read(buffer);
content = new String(buffer);
还有
//按字符读
int ch;
ch = fis.read();
while(ch != -1) {
fileContent += (char)ch;
ch = fis.read();
}
详见 数据存储.
对external存储区进行读写的时候,应该在manifest文件中怎么设置?
在 manifest 中声明权限
在对external存储区进行操作之前应该怎么做?为什么这么做?
检测是否可读可写 因为 external storage 可能不可用,如SD卡被移除在external存储区中能存放的文件分为哪两类?针对这两类文件,在获取存放目录对象的时候,采用什么方法调用?如果刚开始的时候,没有预定义的子目录用于存放你的文件,该怎么做?
public 和 private 前者采用 getExternalStoragePublicDirectory 方法当用户在卸载app的时候,哪些内容是系统自动删除的,哪些是程序员需要关照删除的?
系统自动删除:internal storage 中的、external storage 中 private 的 手动删除:通过 getCacheDir 方式创建的缓存文件,还有一些不会再用到的文件 使用共享首选项 (Shared Preferences)什么是SharedPreferences?
一个Shared Preferences对象指向一个保存键值对的文件,并且提供了简单的方法来读写它们如何来创建或者访问一个sharedPreferences?
getSharedPreferences 通过名字区分 getPreferences 只需一个共享 preference 文件时如何将键值对写入SharedPreferences文件中?注意不是使用SharedPreferences对象直接写入,而是使用SharedPreferences.Editor来写入数据
edit 获取 editor,写入用 putString 等,提交用 commit 方法SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt(getString(R.string.saved_high_score), newHighScore);
editor.commit();
如何从SharedPreferences文件中读取数据?
用 getString、getInt 方法int defaultValue = getResources().getInteger(R.string.saved_high_score_default);
int highScore = sharedPref.getInt(getString(R.string.saved_high_score), defaultValue);
序列化
什么是序列化?xml序列化的操作步骤
序列化是将对象状态转换为可保存或传输的格式的过程 1.创建文件File file = new File(Environment.getExternalStorageDirectory(),"Person.xml");
FileOutputStream fos = new FileOutputStream(file);
XmlSerializer serializer = Xml.newSerializer();
然后 通过序列化器对转换进行操作.
什么是bean?bean中的成员变量一般为private的?那这种成员变量的值怎么进行设置与获取?
如果读写方法符合以下这种命名规范,那么这种class
被称为 JavaBean
// 读方法:
public Type getXyz()
// 写方法:
public void setXyz(Type value)
对
外部不能直接访问,但可通过类中的 set get 方法对其进行设置与获取
有几种xml解析方式?PULL解析过程
三种,DOM解析、SAX解析和PULL解析 1.创建解析器如何在命令行中进入sqlite的工作界面
adb shell如何让windows的控制台中正常显示sqlite中存放的汉字?
将控制台的字符编码切换为 utf-8 即可chcp 65001
熟悉sqlite中的常用命令?
.open 数据库名称: 打开数据库,如果该数据库在磁盘中不存在,则创建并打开
.save 数据库名称: 如果 sqlite3 的启动是通过双击 windows 中的 sqlite3.exe 的图标打开的,系统会在内存中创建一个数据库,这个数据库如果需要存放到磁盘,则需要使用本命令进行存放。如果磁盘上如有同名的数据库,会覆盖
.databases: 用于列出数据库
.tables: 用于列出数据库中的数据表
定义contract类有什么用?
Contract类 是一些常量的容器,它定义了 URI 的名字、表名、列名等 Contract类允许你在同一个包下与其它类使用共同的常量 有助于数据库同 android 的 framework 很好的相容定义helper类有什么用?熟悉该类中的常用方法
getWriteableDatabase()或者getReadableDatebase()方法,创建或打开数据库execSQL、rawQuery、query这三个方法在用于查询时什么区别?为防止sql注入,我们最好选用哪个方法来作查询?
execSQL 查询时使用 SQL 的 select 语句,无返回值ContentValues是个什么类?怎么用?
ContentValues 类中包含很多 get put 方法,通过 key 存值取值public long insert (String table, String nullColumnHack, ContentValues values)
Cursor是什么类?怎么用?
Cursor 是一个接口,用于作为存放查询的结果集Cursor c = db.query(FeedEntry.TABLE_NAME, projection, selection, selectionArgs, null, null, sortOrder);
//cursor 起始位置在 -1 处
cursor.moveToFirst(); //将读取点放在入口位置,read position
long itemId = cursor.getLong(cursor.getColumnIndexOrThrow(FeedEntry._ID));
List itemIds = new ArrayList();
while(cursor.moveToNext()) {
long itemId = cursor.getLong(cursor.getColumnIndexOrThrow(FeedEntry._ID));
itemIds.add(itemId);
}
cursor.close();
什么是事务?它的标准处理模式是怎样的?
事务就是一组 SQL 语句,针对数据库的一组操作db.beginTransaction();
try {
...
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
Android中如何开启事务如何关闭事务
开启事务 beginTransaction 以EXCLUSIVE模式 (排他) 其它线程不可读写简要描述SQLiteOpenHelper的主要作用
用于创建数据库,调用 getWriteableDatabase 或 getReadableDatabase 方法简要描述一下SQLite数据库
一款轻型的数据库,是遵守 ACID 的关系型 DBMS,包含在一个相对小的 C 库中简要写出Android中创建数据库的步骤.
首先创建一个 SQLiteOpenHelper 类的子类,例如 FeedReaderDbHelperFeedReaderDbHelper mDbHelper = new FeedReaderDbHelper(getContext());
SQLiteDatabase db = mDbHelper.getWritableDatabase();
然后用 ContentValues 插入数据
ContentValues values = new ContentValues();
values.put(FeedEntry.COLUMN_NAME_ENTRY_ID, id);
这个方法
public long insert (String table, String nullColumnHack, ContentValues values)
在调用 getWriteableDatabase 方法是时候打开或创建了数据库
End.
Earnest~ 原创文章 95获赞 190访问量 2万+ 关注 私信 展开阅读全文
--结束END--
本文标题: 【Android】数据存储_问答
本文链接: https://www.lsjlt.com/news/29889.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-01-21
2023-10-28
2023-10-28
2023-10-27
2023-10-27
2023-10-27
2023-10-27
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0