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 getAll():获取

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()函数来更新数据库。