数据存储
典型的桌面OS的文件系统是公共文件系统——任何软件可以使用它来存储和读取文件,改文件也可以被其他应用程序所读取。
Android提供了不同的文件系统,所有应用程序数据为该应用程序私有。当然也可以通过统一的借口提供给其他应用程序访问。
?
10.1SharedPreferences
用于存储简单的配置信息,如欢迎语、用户名及密码,以键值对方式存储。
初始化对象:
SharedPreferences setting= getSharedPreferences(“SEETING_INFO”,0);
接受前端输入并保存:
Setting.edit().putString(“name”,X.getText().toString());
获取保存的值
Setting.getString(“name”,””);
?
界面生成时一般执行onCreate(),退出时一般执行onStop();
?
SharedPreferences一般以XML形式保存。SEETING_INFO.xml
?
10.2类似Java I/O形式的接口:openFileInput和OpenFileOutput
示例:
FileOutputStream fos = openFileOutput(“文件名”,Context.MODE_PRIVATE—写入模式);
FileInputStream? fis = openFileInput(“文件名”,);
FileOutputStream创建的文件其他应用程序无法读取。如需共享,则需要使用ContentProvider。
?
如果应用程序需要额外的资源文件,可将其放在res/raw目录下,使用getResources获取资源。
Resource res = getResources();
InputStream is = res.openRawResource(R.raw.fileId);
10.3SQlite
Android使用SQLite作为数据库。支持SQL语句,轻量级嵌入式数据库。
一个SQLiteDatabase示例代表一个SQLite数据表,数据库在Android中的私有的,名字也是唯一的。
?
SQLiteOpenHelper用于生成数据库,并对数据库版本管理。调用getWritableDatabase()或getReadableDatabase()时,如无数据库,则生成一个。
是抽象类,需要继承并实现3个方法:onCreate()
onCreate():数据库第一次生成时使用,在该方法中生成数据库表。
onUpdate():数据库升级时,系统主动调用该方法。一般在该方法中删旧表,建新表。
OnOpen():打开数据库时的回调函数,一般不会用到。
?
Android日志打印级别:Verbose、Debug、Info、Warning、Error。
?
Cursor是随机读写数据库查询结果的借口
ContentValues以键值对存储数据,键位Sring类型,值为基础类型。
?
SimpleCursorAdapter负责将Cursor中的数据放到ListView中。同理ArrayAdapter
10.4ContentProvider
一个应用程序可以通过ContentProvider的接口将自己的数据暴露出去,外界通过其他接口读写数据。
常用的接口是query(),insert(),update(),delete()
?
外界通过ContentResolver访问ContentProvider中的数据。在Android中,通过getContentResolver()获取现有应用中的ContentResolver实例。
?
ContentResolver和ContentProvider通过URL读写数据。URL可以是指定全部数据,可以是某个ID的数据。
URL由三部分组成:
Content://+要获取数据的字符串片段+ID
?
startManagingCursor(Corsor):系统管理生成的Corsor
?
ListView中的id 必须声明为@+id/Android:才能被ListView引用。
?
在Android数据库中,每个表都有一个_id字段。
?
10.5网路存储
WebService
若需访问外部网络,需要在AndroidManinfest.xml中加入代码申请许可权限:
<use-permission Android:name=”Android.permission.INTERNET”
以HttpPost访问:request=new HttpPost(url网址)
Request.setEntry();
Try{
??? HttpResponse response=new DefaultHttpClient().execute(request);
If(response.getStatueLine().getStatueCode()!=404)
?? String result=EntityUtil.toString(response.getEntity());
}catch(Exception e){
?
}