2024年3月13日发(作者:)
Android面试题数据保
存和网络
集团标准化办公室:[VV986T-J682P28-JP266L8-68PNN]
1. 常用的数据持久化(长久保存数据)方式有哪些?
答: 1、SharedPreference,共享参数形式,一种以Key-Value的键值对形
式保存数据的方式,Android内置的,一般应用的配置信息 ,推荐使用此
种方式保存,不能存文件也不适合。其存储的位置在
/data/data/packageName/shared_prefs文件夹下面。
2、Internal Storage:把数据存储到手机内部的存储空间,主要用
来保存私有数据/data/data/packageName/files文件夹下 面
3、External Storage:把数据存储到手机的外部存储SD卡中,主要
用来保存非私有和大型数据,它有应用程序专用的文件夹 ,也有所有程
序公用的文件夹(这个文件夹不会随着应用程序的卸载而卸载),需要赋予应用程
序访问Sdcard的权限,Android的权限 控制尤为重点,在Android程序
中,如果需要做一些越界的操作,均需要对其进行授权才可以访问。在
中添加代码 : android:name="_EXTERNAL_STORAGE"/> 4、SQLite Databases:以表格形式存储信息的一个轻量级的小型数 据库 5、Network Connection:将数据存储到网络服务器上 6、ContentProvider:他提供一种方式实现两个不同应用程序之间的 通讯 2. ShareedPrefrence的读写数据的基本方法? 答:它保存的数据主要是简单类型的Key-value对。并且Value部分只能是 一些基本数据类型:boolean、float、int、long、String等 。 1、得到SharedPreference对象的方法有: a、Context类中的getSharedPreference(String name,int mode)方法,name :存储的文件名,如果不存 在会自 动创建一个 mode:访问模式,一般有两个参数MODE_PRIVTE(私有,只有当前应用程序才能进 行读写)和 MODE_MULTI_PROCESS(多个进程对同 一个文件进行读写) b、Activity类中的getSharedPreference(int mode)方 法,自动将当前活动的类名作为文件名 c、PreferenceManager类的 getDefaultSharedPreferences(Context context)方法,这是一个静态方法,接收 Context参数,会自动将应用程序的包名作为前缀去命名文件 2、读常用方法: a、boolean contains(String Key):判断 SharedPreferences是否包含特定Key的数据 b、abstract Map SharedPreferences数据里全部的Key-Value对。 c、 boolean getXxx(String key,Xxx defValue):获取 SharedPreferences数据里指定Key对应的value。如果该Key 不存 在,返回默认值defValue。 3、写常用方法(通过SharedPreferences的内部接口Editor实现, edit()方法即可得到Editor对象) a、abstract clear():清空 SharedPreferences里所有的数据 b、abstract putXxx(String key,xxx value):向SharedPreferences中插入指定的Key- Value 对。 c、abstract remove(String key):从SharedPreferences中移除指定Key的数据。 d、boolean commit():当Editor编辑完成后,调用该方法提 交修改,切记不可忘记调用此方法,否则不能储存数据 3. SQLite的基本语句:建表、增删改查分别是怎么样的? 答: 建表:CREATE TABLE tableName(column1 INTEGER PRIMARY KEY AUTOINCREMENT,column2 VARCHAR(num),.....); 添加:INSERT INTO tableName values(value1,value2);添加所 有字段 INSERT INTO tableName(column1,column2) values (value1,value2);添加字段column1和字段column2 删除:DELETE TABLE tableName 删除全部 DELETE TABLE tableName WHERE column2 = vaule2按条件查 询(字段column2的值为vaule2的这一行,如果value2为字 符串则需要用单引号括起来) 更新:UPDATE tableName SET column1 = value1, column2 = value2,...;所有数据都这样更新 UPDATE tableName SET column1 = value1, column2 = value2 WHERE column3 = value3;更新column3 = value3这一 行的column1 和column2的值 查询:SELECT * FROM tableName;查询所有的数据 SELECT column1,column3 FROM tableName; 查询所有数 据,但是只显示column1,column3这两个字段的所有值 SELECT * FROM tableName WHERE column2 > someValue;查 询column2字段的值大于someValue的所有字段 SELECT * FROM tableName WHERE column1 = value1 ORDER BY column2 ASC;按条件查询结果以column2 的升序排列 SELECT * FROM tableName WHERE column1 = value1 ORDER BY column2 DESC;按条件查询结果以column2 的降序排列 SELECT * FROM tableName WHERE column2 LIKE '%key%' ORDER BY column2 ASC;// 模糊查找 4. SQLiteOpenHelper的作用是什么? 答:SQLiteOpenHelper主要是用来创建数据库和表格,以及为数据库升级 的作用。在Android系统中,既然可以通过Context类的 openOrCreateDatabase()函数打开或创建SQLite数据库,并且可以通过其 返回值(即SQLiteDatabase对像)调用execSQL()函数对数据 库做任何的操 作(CRUD),那么还需要SQLiteOpenHelper这个类有什么意义呢? 例如: db = openOrCreateDatabase(DB_NAME, _PRIVATE, null); L("DROP TABLE IF EXISTS students"); L("CREATE TABLE IF NOT EXISTS students (_id INTEGER PRIMARY KEY AUTOINCREMENT, name, age INTEGER)"); 实际上,直接操作数据库的语句和其他的语句混在一起,不利于程序的模块 化。而SQLiteOpenHelper是一个抽象类,通过它的名字可以 看出来,是一个帮我 们打开数据库的小助手: 1、当new SQLiteOpenHelper子类对象时,就会通过其构造函数创建 数据库文件(当然如果数据库如果存在,就不用创建了, 并且自动调用 onCreate(SQLiteDatabase db)创建数据表; 2、当要对数据库读操作时,只需调用其子类的 getReadableDatabase()返回SQLiteDatabase实例,通过该实例来执行SQL语句 ; 3、当要对数据库写操作时,只需调用其子类的 getWritableDatabase()返回SQLiteDatabase实例,通过该实例来执行SQL语句 ; 4、当通过构造函数传进来的数据库版本高于之前的版本时,系统会 调用onUpgrade()函数来更新数据库。


发布评论