Android数据存储和数据访问
Android课后习题答案整理

第一章 Android简介1.简述各种手机操作系统的特点.答案:目前,手机上的操作系统主要包括以下几种,分别是Android、iOS、Windows Mobile、Windows Phone 7、Symbian、黑莓、PalmOS和Linux。
(1)Android是谷歌发布的基于Linux的开源手机平台,该平台由操作系统、中间件、用户界面和应用软件组成,是第一个可以完全定制、免费、开放的手机平台。
Android底层使用开源的Linux 操作系统,同时开放了应用程序开发工具,使所有程序开发人员都在统一、开放的开发平台上进行开发,保证了Android应用程序的可移植性。
(2)iOS是由苹果公司为iPhone、iPod touch、iPad以及Apple TV开发的操作系统,以开放源代码的操作系统Darwin为基础,提供了SDK,iOS操作系统具有多点触摸操作的特点,支持的控制方法包括滑动、轻按、挤压和旋转, 允许系统界面根据屏幕的方向而改变方向,自带大量的应用程序。
(3)Windows Mobile是微软推出的移动设备操作系统,对硬件配置要求较高,一般需要使用高主频的嵌入式处理器,从而产生了耗电量大、电池续航时间短和硬件成本高等缺点,Windows Mobile 系列操作系统包括Smartphone、Pocket PC和Portable Media Center。
随着Windows Phone 7的出现,Windows Mobile正逐渐走出历史舞台。
(4)Windows Phone 7具有独特的“方格子”用户界面,非常简洁,黑色背景下的亮蓝色方形图标,显得十分清晰醒目,集成了Xbox Live游戏和Zune音乐功能,可见Windows Phone 7对游戏功能和社交功能的重视。
(5)Symbian是为手机而设计的实时多任务32位操作系统,它的功效低,内存占用少,提供了开发使用的函数库、用户界面、通用工具和参考示例。
Android选择题集锦

下面关于Android dvm的进程和Linux的进程,应用程序的进程说法正确的是?选择一项:a. DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,不一定拥有一个独立的Dalvik虚拟机实例.而每一个DVM都是在Linux中的一个进程,所以说可以认为是同一个概念.b. DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,不一定拥有一个独立的Dalvik虚拟机实例.而每一个DVM不一定都是在Linux 中的一个进程,所以说不是一个概念.c. DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik 虚拟机实例.而每一个DVM 不一定都是在Linux 中的一个进程,所以说不是一个概念.d. DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例.而每一个DVM都是在Linux 中的一个进程,所以说可以认为是同一个概念.题目2下列选项哪个不是Activity启动的方法?a. goToActivityb. startActivityc. startActivityFromChildd. startActivityForResult题目3解析xml 的方式有()a. 字符器类型b. 流方式c. domd. SAX题目4下列哪一个不属于Activity的生命周期方法?a. onInit( )b. onStart( )c. onStop( )d. onPause( )对于XML布局文件中的视图控件,layout_width属性的属性值不可以是什么?a. match_parentb. fill_parentc. wrap_contentd. match_content题目6对一些资源以及状态的操作保存,最好是保存在Activity生命周期的哪个函数中进行?a. onStart( )b. onPause( )c. onCreate( )d. onResume( )题目7关于视图控件的常用事件描述中,不正确的是?a. Click事件只能使用在按钮上,表示按钮的点击动作b. 当TextView类视图控件失去焦点或获得焦点时,将触发FocusChange事件c. 当单选框中某一选项被选择时,将触发CheckedChange事件d. 当多选框中某一选项被选择时,将触发CheckedChange事件题目8以下关于Android应用程序的目录结构描述中,不正确的是?a. src目录是应用程序的主要目录,由Java类文件文件组成b. assets目录是原始资源目录,该目录中的内容将不会被R类所引用c. res目录是应用资源目录,该目录中的所有资源内容都会被R类所索引d. AndroidManifest.xml文件是应用程序目录清单文件,该文件由ADT自动生成,不需要程序员手动修改题目9下列关于XML布局文件在Java代码中被引用的说明中,不正确的是?a. 在Activity中,可以使用findViewById( )方法,通过资源id,获得指定视图元素b. 在Activity中,可以使用R.drawable-system.***方式引用Android系统所提供的图片资源c. 在Activity中,可以使用setContentView( )方法,确定加载哪一个布局文件d. 可以使用View类的findViewById( )方法,获得当前View对象中的某一个视图元素题目10下列关于Android布局文件常用的长度/大小单位的描述中,不正确的是?a. dp是设备独立像素,不依赖于设备,是最常用的长度单位b. sp代表放大像素,主要用于字体大小的显示c. px是像素单位,在不同的设备上显示效果相同,因此推荐在布局中使用该单位d. 在设置空间长度等相对距离时,推荐使用dp单位,该单位随设备密度的变化而变化题目11下列哪一个选项不属于Android中预定义的布局方式?a. TabLayoutb. RelativeLayoutc. AbsoluteLayoutd. LinearLayout题目12下列哪一个选项不属于AdapterView类的子选项?Gallery ListView Spinner GridViewa. ListViewb. Spinnerc. GridViewd. ScrollView题目13下列哪一款移动设备搭载的是Android平台?a. NOKIA手机b. 小米手机c. iPhone手机d. iPad题目14下列关于ListView使用的描述中,不正确的是?a. 要使用ListView,必须为该ListView使用Adpater方式传递数据b. 要使用ListView,该布局文件对应的Activity必须继承ListActivityc. ListView中每一项的视图布局既可以使用内置的布局,也可以使用自定义的布局方式d. ListView中每一项被选中时,将会触发ListView对象的ItemClick事件题目15下列属于SAX解析xml文件的优点的是?a. 将整个文档树存储在内存中,便于操作,支持删除,修改,重新排列等多种功能b. 指网页元素的位置,距离右边框和下边框的距离c. 整个文档调入内存,浪费时间和空间d. 不是长久驻留在内存,数据不是持久的,事件过后,若没有保存数据,数据就会消失题目16在android 中使用Menu 时可能需要重写的方法有?a. onOptionsItemSelected()b. onCreateOptionsMenu()c. onItemSelected()d. onCreateMenu()题目17下列关于内存回收的说明,哪个是正确的?a. 程序员必须创建一个线程来释放内存b. 内存回收程序允许程序员直接释放内存c. 内存回收程序负责释放无用内存d. 内存回收程序可以在指定的时间释放内存对象题目18下面异常是属于Runtime Exception 的是?a. NullPointerExceptionb. IllegalArgumentExceptionc. BufferUnderflowExceptiond. ArithmeticException题目19Math.round(11.5)等于多少(). Math.round(-11.5)等于多少?选择一项:a. 11 ,-11b. 11 ,-12c. 12 ,-11d. 12 ,-12题目20下列程序段:void complicatedexpression_r(){int x=20, y=30;boolean b;b=x>50&&y>60||x>50&&y60||xa. 1b. 0c. trued. false题目21在android中使用SQLiteOpenHelper这个辅助类时,可以生成一个数据库,并可以对数据库版本进行管理的方法可以是?a. getDatabase()b. getWriteableDatabase()c. getReadableDatabase()d. getAbleDatabase()题目22android 关于service生命周期的onCreate()和onStart()说法正确的是?a. 如果service已经启动,将先后调用onCreate()和onStart()方法b. 当第一次启动的时候先后调用onCreate()和onStart()方法c. 当第一次启动的时候只会调用onCreate()方法d. 如果service已经启动,只会执行onStart()方法,不再执行onCreate()方法题目23下列选项中不属于GLSurFaceView特性的是?a. 管理一个surface,这个surface就是一块特殊的内存,能直接排版到android的视图view上。
《Android应用开发》课件——第5章 数据存储

File SDPath = Environment.getExternalStorageDirectory();
File file = new File(SDPath, "data.txt");获取SD卡目录
String data = "HelloWorld";
FileOutputStream fos = new FileOutputStream(file);
注意:Android系统有一套自己的安全模型,默认情况下任何应用创 建的文件都是私有的,其他程序无法访问。
✎
5.2.1 将数据存入到文件中
内部存储
String fileName = "data.txt";
// 文件名称
String content = "helloworld";
// 保存数据
FileOutputStream fos = openFileOutput(fileName, MODE_PRIVATE);
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
动态申请权限的方法
外部存储 ✓ 存储位置
将数据以文件的形式存储到外部设备上。
✓ 存储位置
mnt/sdcard/目录下。
✓ 其它应用操作该文件时
不用设置权限,会被其它应用共享
✓ 删除文件
该文件可在本应用外删除,使用前需要 确认外部设备是否可用
✓ 删除文件
直接使用FileOutputStream和 FileInputStream操作对象
Android操作系统与应用开发第5章

第5章 Android数据存储
实际上SharedPreferences是采用xml文件格式将数据存储
到设备中的,文件存放在File Explorer中的
/data/data/<package name>/shares_prefs目录下。如果希望
SharedPreferences使用的xml文件能被其他应用读和写,则可 以指定Context.MODE_WORLD_READABLE和 Context.MODE_WORLD_WRITEABLE权限。
第5章 Android数据存储
button.setOnClickListener(new Button.OnClickListener()
{ @Override public void onClick(View v) { //这部分是自动产生方法桩 try {
//写入数据
第5章 Android数据存储
第5章 Android数据存储
一个实现SharedPreferences存储的实例代码如下:
//获取SharedPreferences对象 SharedPreferences user = getSharedPreferences(“user_info”, MODE_PRIVATE); //存入数据 Editor editor = user.edit(); editor.putString(“NAME”, “hello”);
(当然不是真的SD卡,只是镜像文件)。创建SD卡可以在
Eclipse创建模拟器时随同创建,也可以使用DOS命令进行创
建,操作方法如下: 在DOS窗口中进入Android SDK安装路径的tools目录, 输入以下命令创建一张容量为2 GB的SD卡(文件后缀可以随 便取,建议使用.img): mksdcard 2048M D:\AndroidTool\sdcard.img
android 培训计划

android 培训计划一、培训计划背景Android是目前世界上用户最多的手机操作系统之一,它在全球市场占有率逐渐上升。
作为一名Android开发人员,掌握Android开发技术,不仅可以在手机应用开发领域得到广泛应用,还可以为个人或企业带来丰厚的收益。
因此,对于想要从事Android开发的人员来说,进行一定的培训是非常有必要的。
二、培训目标通过本次Android培训,学员将掌握以下技能:1. Android开发基础知识;2. Android界面设计;3. Android应用开发流程;4. Android数据存储和访问;5. Android网络编程;6. Android性能优化。
三、培训内容1. Android开发基础知识(1)Android平台介绍(2)Android应用程序的基本结构(3)Android应用组件(4)Android应用的工作原理(5)Android开发环境搭建2. Android界面设计(1)Android布局管理(2)Android控件使用(3)Android界面的事件处理(4)Android资源管理3. Android应用开发流程(1)Android应用的生命周期管理(2)Android应用的调试与测试(3)Android应用的发布与分发4. Android数据存储和访问(1)Android数据存储方式(2)Android SQLite数据库的使用(3)Android文件存储与读取5. Android网络编程(1)Android网络通信的基础知识(2)Android网络编程的实现(3)Android异步任务处理6. Android性能优化(1)Android应用的性能测试与优化(2)Android应用内存管理(3)Android应用的安全性保障四、培训方式本次Android培训将采用以下方式进行:1. 理论讲解:由资深Android开发工程师进行线上授课,讲解Android开发的基础知识和实际开发技巧。
Android五种数据存储方式

Android五种数据存储⽅式android 五种数据存储:SharePreferences、SQLite、Contert Provider、File、⽹络存储Android系统提供了四种存储数据⽅式。
分别为:SharePreference、SQLite、Content Provider和File。
但由于Android系统中,数据基本是私有的,都是存放于”data/data”程序包名⽬录下,所以要实现数据共享,正确⽅式是使⽤Content ProviderSQLite:SQLite是⼀个轻量级的数据库,⽀持基本的SQL语法,是常被采⽤的⼀种数据存储⽅式。
Android为此数据库提供了⼀个名为SQLiteDatabase的类,封装了⼀些操作数据库的apiSharedPreference:除SQLite数据库外,另⼀种常⽤的数据存储⽅式,其本质就是⼀个xml⽂件,常⽤于存储较简单的参数设置。
File:即常说的⽂件(I/O)存储⽅法,常⽤语存储⼤数量的数据,但是缺点是更新数据将是⼀件困难的事情。
ContentProvider: Android系统中能实现所有应⽤程序共享的⼀种数据存储⽅式,由于数据通常在各应⽤间的是互相私密的,所以此存储⽅式较少使⽤,但是其⼜是必不可少的⼀种存储⽅式。
例如⾳频,视频,图⽚和通讯录,⼀般都可以采⽤此种⽅式进⾏存储。
每个Content Provider都会对外提供⼀个公共的URI(包装成Uri对象),如果应⽤程序有数据需要共享时,就需要使⽤Content Provider为这些数据定义⼀个URI,然后其他的应⽤程序就通过Content Provider传⼊这个URI来对数据进⾏操作。
URI由3个部分组成:"content://"、数据的路径、标识ID(可选)。
1)SQLite数据存储======================================================================SQLite是⼀种转为嵌⼊式设备设计的轻型数据库,其只有五种数据类型,分别为:NULL:空值INTEGER:整数REAL:浮点数TEXT:字符串BLOB:⼤数据在SQLite中,并没有专门设计BOOLEAN和DATE类型,因为BOOLEAN型可以⽤INTEGER的0和1代替true和false,⽽DATE类型则可以拥有特定格式的TEXT、REAL和INTEGER的值来代替显⽰,为了能⽅便的操作DATE类型,SQLite提供了⼀组函数,在Android系统中提供了anroid.database.sqlite包,⽤于进⾏SQLite数据库的增,删,改,查⼯作,其主要⽅法如下: beginTransaction(): 开始⼀个事务。
Android开发中的数据存储和访问方法详解(二)

一、引言在当今移动互联网时代,Android系统已经成为最重要的移动操作系统之一。
作为Android开发者,数据存储和访问是必不可少的技术领域。
本文将详细介绍Android开发中的数据存储和访问方法,帮助读者更好地理解和应用这些技术。
二、内部存储内部存储是指应用程序在设备上的私有存储空间。
在Android中,每个应用都有一个私有的内部存储空间,其他应用无法访问,确保了数据的安全性。
我们常用的方法有文件存储和SharedPreferences两种。
文件存储是将数据以文件的形式保存在设备上。
开发者可以通过Java的File和FileOutputStream来实现文件的读写操作。
当需要保存少量简单数据时,可以使用SharedPreferences,它是一种键值对的存储方式,非常方便快捷。
三、外部存储外部存储是指设备上的公共存储空间,可以被所有应用访问到。
Android系统提供了一些方法来操作外部存储,如读写SD卡上的文件。
外部存储的主要优点是容量大,但相对来说对数据的安全性和隐私保护较差。
在Android开发中,我们可以通过File类来操作外部存储。
首先需要获取外部存储的状态,确认是否有可用的外部存储空间,并声明文件的写入权限。
然后可以使用FileOutputStream来将数据写入外部存储。
四、数据库数据库是Android开发中常用的数据存储和访问方式。
Android系统内置了SQLite数据库,开发者可以通过SQLiteOpenHelper类来创建、打开和管理数据库。
SQLite是一种轻量级的数据库引擎,非常适用于移动设备。
在使用数据库之前,首先需要创建数据库表和定义数据结构。
通过创建一个继承自SQLiteOpenHelper的子类,可以实现数据库的创建和版本管理等功能。
然后可以使用SQLiteDatabase类来执行增删改查等操作。
通过使用SQLite数据库,开发者可以更高效地存储和管理大量结构化数据。
Android数据存储方式有哪几种

Android数据存储⽅式有哪⼏种以下内容给⼤家介绍Android数据存储提供了五种⽅式:1、SharedPreferences2、⽂件存储3、SQLite数据库4、ContentProvider5、⽹络存储 本⽂主要介绍如何使⽤⽂件来存储数据。
Android⽂件操作⽤到的是Java.IO中的FileOutputStream和FileInputStream类。
⼀、存储⽂件 ⾸先实例化⼀个FileOutputStream。
FileOutputStream foStream = openFileOutput(fileName, MODE_PRIVATE);// fileName: 要写⼊⽂件的名称// MODE_PRIVATE: 为默认操作模式,代表该⽂件是私有数据,只能被应⽤本⾝访问,在该模式下,写⼊的内容会覆盖原⽂件的内容// MODE_APPEND: 模式会检查⽂件是否存在,存在就往⽂件追加内容,否则就创建新⽂件.// MODE_WORLD_READABLE: 表⽰当前⽂件可以被其他应⽤读取,不推荐使⽤// MODE_WORLD_WRITEABLE: 表⽰当前⽂件可以被其他应⽤写⼊,不推荐使⽤ 然后调⽤foStream.write()即可完成写⼊。
byte[] buffer = fileContent.getBytes();foStream.write(buffer);Toast.makeText(MainActivity.this, "写⼊成功",Toast.LENGTH_SHORT).show(); 最后进⾏⼀些清理⼯作,刷新写出流和关闭流。
foStream.flush();foStream.close();⼆、读取⽂件 同样的,⾸先实例化⼀个FileInputStream。
FileInputStream fiStream = openFileInput(fileName) 然后调⽤fiStream.read()即可int len = fiStream.available();byte[] buffer = new byte[len];fiStream.read(buffer) 最后,将⽂本显⽰并关闭读⽂件流etContent.setText(new String(buffer));Toast.makeText(MainActivity.this, "读取成功",Toast.LENGTH_SHORT).show();fiStream.close();三、完整代码import android.support.v.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;import java.io.FileInputStream;import java.io.FileOutputStream;public class MainActivity extends AppCompatActivity {private EditText etName;private EditText etContent;private Button btnWrite;private Button btnRead;private String fileName = "";private String fileContent = "";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);etName = (EditText)findViewById(R.id.etName);etContent = (EditText)findViewById(R.id.etContent);btnWrite = (Button)findViewById(R.id.btnWrite);btnRead = (Button)findViewById(R.id.btnRead);btnWrite.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {fileName = etName.getText().toString();fileContent = etContent.getText().toString();try {FileOutputStream foStream = openFileOutput(fileName, MODE_PRIVATE);byte[] buffer = fileContent.getBytes();foStream.write(buffer);Toast.makeText(MainActivity.this, "写⼊成功",Toast.LENGTH_SHORT).show();foStream.flush();foStream.close();}catch(Exception e){e.printStackTrace();}}});btnRead.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {fileName = etName.getText().toString();try{FileInputStream fiStream = openFileInput(fileName);int len = fiStream.available();byte[] buffer = new byte[len];fiStream.read(buffer);etContent.setText(new String(buffer));Toast.makeText(MainActivity.this, "读取成功",Toast.LENGTH_SHORT).show();fiStream.close();}catch(Exception e){e.printStackTrace();}}});}}<RelativeLayout xmlns:android="/apk/res/android"xmlns:tools="/tools" android:layout_width="match_parent"android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"><EditTextandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/etName"android:layout_alignParentTop="true"android:layout_alignParentLeft="true"android:layout_alignParentStart="true"android:layout_alignParentRight="true"android:layout_alignParentEnd="true"android:text="⽂件名" /><EditTextandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/etContent"android:layout_below="@+id/etName"android:layout_alignParentLeft="true"android:layout_alignParentStart="true"android:layout_alignParentRight="true"android:layout_alignParentEnd="true"android:text="⽂件内容" /><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="保存"android:id="@+id/btnWrite"android:layout_alignTop="@+id/btnRead"android:layout_toLeftOf="@+id/btnRead"android:layout_toStartOf="@+id/btnRead" /> <Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="读取"android:id="@+id/btnRead"android:layout_below="@+id/etContent"android:layout_alignParentRight="true"android:layout_alignParentEnd="true" /></RelativeLayout>。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
南昌航空大学实验报告二0一4 年11 月14 日课程名称:Android 实验名称:Android数据存储和数据访问班级:姓名:同组人:指导教师评定:签名:一:实验目的掌握SharedPreferences的使用方法;掌握各种文件存储的区别与适用情况;了解SQLite数据库的特点和体系结构;掌握SQLite数据库的建立和操作方法;理解ContentProvider的用途和原理;掌握ContentProvider的创建与使用方法二:实验工具Eclipse(MyEclipse)+ ADT + Android2.2 SDK;三:实验题目1.应用程序一般允许用户自己定义配置信息,如界面背景颜色、字体大小和字体颜色等,尝试使用SharedPreferences保存用户的自定义配置信息,并在程序启动时自动加载这些自定义的配置信息。
2.尝试把第1题的用户自己定义配置信息,以INI文件的形式保存在内部存储器上。
3.使用代码建库的方式,创建名为test.db的数据库,并建立staff数据表,表内的属性值如下表所示:4.建立一个ContentProvider,用来共享第3题所建立的数据库;四:实验代码Internalpublic class Internal extends Activity {private final String = "";private TextView labelView;private TextView displayView;private CheckBox appendBox ;private EditText entryText;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.main);labelView = (TextView)findViewById(bel);displayView = (TextView)findViewById(R.id.display);appendBox = (CheckBox)findViewById(R.id.append);entryText = (EditText)findViewById(R.id.entry);Button writeButton = (Button)findViewById(R.id.write);Button readButton = (Button)findViewById(R.id.read);writeButton.setOnClickListener(writeButtonListener);readButton.setOnClickListener(readButtonListener);entryText.selectAll();entryText.findFocus();}OnClickListener writeButtonListener = new OnClickListener() { @Overridepublic void onClick(View v) {fos = null;try {if (appendBox.isChecked()){fos = open(,Context.MODE_APPEND);}else {fos = open(,Context.MODE_PRIVATE);}String text = entryText.getText().toString();fos.write(text.getBytes());labelView.setText("文件写入成功,写入长度:"+text.length());entryText.setText("");} catch ( e) {e.printStackTrace();}catch (IOException e) {e.printStackTrace();}finally{if (fos != null){try {fos.flush();fos.close();} catch (IOException e) {e.printStackTrace();}}}}};OnClickListener readButtonListener = new OnClickListener() { @Overridepublic void onClick(View v) {displayView.setText("");fis = null;try {fis = open();if (fis.available() == 0){return;}byte[] readBytes = new byte[fis.available()];while(fis.read(readBytes) != -1){}String text = new String(readBytes);displayView.setText(text);labelView.setText("文件读取成功,文件长度:"+text.length());} catch ( e) {e.printStackTrace();}catch (IOException e) {e.printStackTrace();}}};}SimplePreferenceDemopublic class SimplePreferenceDemo extends Activity {private EditText nameText;private EditText ageText;private EditText heightText;public static final String PREFERENCE_NAME = "SaveSetting";public static int MODE = Context.MODE_WORLD_READABLE +Context.MODE_WORLD_WRITEABLE;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.main);nameText = (EditText)findViewById();ageText = (EditText)findViewById(R.id.age);heightText = (EditText)findViewById(R.id.height);}@Overridepublic void onStart(){s uper.onStart();l oadSharedPreferences();}@Overridepublic void onStop(){s uper.onStop();s aveSharedPreferences();}private void loadSharedPreferences(){SharedPreferences sharedPreferences =getSharedPreferences(PREFERENCE_NAME, MODE);String name = sharedPreferences.getString("Name","Tom");int age = sharedPreferences.getInt("Age", 20);float height = sharedPreferences.getFloat("Height",1.81f);nameText.setText(name);ageText.setText(String.valueOf(age));heightText.setText(String.valueOf(height));}private void saveSharedPreferences(){SharedPreferences sharedPreferences =getSharedPreferences(PREFERENCE_NAME, MODE);SharedPreferences.Editor editor = sharedPreferences.edit();editor.putString("Name", nameText.getText().toString());editor.putInt("Age",Integer.parseInt(ageText.getText().toString()));editor.putFloat("Height",Float.parseFloat(heightText.getText().toString()));mit();}}SQLiteDemoDBAdapter.javapublic class DBAdapter {private static final String DB_NAME = "people.db";private static final String DB_TABLE = "peopleinfo";private static final int DB_VERSION = 1;public static final String KEY_ID = "_id";public static final String KEY_NAME = "name";public static final String KEY_AGE = "age";public static final String KEY_HEIGHT = "height";private SQLiteDatabase db;private final Context context;private DBOpenHelper dbOpenHelper;public DBAdapter(Context _context) {context = _context;}/** Close the database */public void close() {if (db != null){db.close();db = null;}}/** Open the database */public void open() throws SQLiteException {dbOpenHelper = new DBOpenHelper(context, DB_NAME, null, DB_VERSION);try {db = dbOpenHelper.getWritableDatabase();}catch (SQLiteException ex) {db = dbOpenHelper.getReadableDatabase();}}public long insert(People people) {ContentValues newValues = new ContentValues();newValues.put(KEY_NAME, );newValues.put(KEY_AGE, people.Age);newValues.put(KEY_HEIGHT, people.Height);return db.insert(DB_TABLE, null, newValues);}public People[] queryAllData() {Cursor results = db.query(DB_TABLE, new String[] { KEY_ID, KEY_NAME, KEY_AGE, KEY_HEIGHT},null, null, null, null, null);return ConvertToPeople(results);}public People[] queryOneData(long id) {Cursor results = db.query(DB_TABLE, new String[] { KEY_ID, KEY_NAME, KEY_AGE, KEY_HEIGHT},KEY_ID + "=" + id, null, null, null, null);return ConvertToPeople(results);}private People[] ConvertToPeople(Cursor cursor){int resultCounts = cursor.getCount();if (resultCounts == 0 || !cursor.moveToFirst()){return null;}People[] peoples = new People[resultCounts];for (int i = 0 ; i<resultCounts; i++){peoples[i] = new People();peoples[i].ID = cursor.getInt(0);peoples[i].Name =cursor.getString(cursor.getColumnIndex(KEY_NAME));peoples[i].Age =cursor.getInt(cursor.getColumnIndex(KEY_AGE));peoples[i].Height =cursor.getFloat(cursor.getColumnIndex(KEY_HEIGHT));cursor.moveToNext();}return peoples;}public long deleteAllData() {return db.delete(DB_TABLE, null, null);}public long deleteOneData(long id) {return db.delete(DB_TABLE, KEY_ID + "=" + id, null);}public long updateOneData(long id , People people){ContentValues updateValues = new ContentValues();updateValues.put(KEY_NAME, );updateValues.put(KEY_AGE, people.Age);updateValues.put(KEY_HEIGHT, people.Height);return db.update(DB_TABLE, updateValues, KEY_ID + "=" + id, null);}/** 静态Helper类,用于建立、更新和打开数据库*/private static class DBOpenHelper extends SQLiteOpenHelper {public DBOpenHelper(Context context, String name, CursorFactory factory, int version) {super(context, name, factory, version);}private static final String DB_CREATE = "create table " +DB_TABLE+ " ("+ KEY_ID+ " integer primary key autoincrement, " +KEY_NAME+ " text not null, "+ KEY_AGE+ " integer,"+ KEY_HEIGHT + " float);";@Overridepublic void onCreate(SQLiteDatabase _db) {_db.execSQL(DB_CREATE);}@Overridepublic void onUpgrade(SQLiteDatabase _db, int_oldVersion, int _newVersion) {_db.execSQL("DROP TABLE IF EXISTS " + DB_TABLE);onCreate(_db);}}}People.javapublic class People {public int ID = -1;public String Name;public int Age;public float Height;@Overridepublic String toString(){String result = "";result += "ID:" + this.ID + ",";result += "姓名:" + + ",";result += "年龄:" + this.Age + ", ";result += "身高:" + this.Height + ",";return result;}}SQLiteDemo.javapublic class SQLiteDemo extends Activity {/** Called when the activity is first created. */private DBAdapter dbAdepter ;private EditText nameText;private EditText ageText;private EditText heightText;private EditText idEntry;private TextView labelView;private TextView displayView;@Overridepublic void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);setContentView(yout.main);nameText = (EditText)findViewById();ageText = (EditText)findViewById(R.id.age);heightText = (EditText)findViewById(R.id.height);idEntry = (EditText)findViewById(R.id.id_entry);labelView = (TextView)findViewById(bel);displayView = (TextView)findViewById(R.id.display);Button addButton = (Button)findViewById(R.id.add);Button queryAllButton = (Button)findViewById(R.id.query_all); Button clearButton = (Button)findViewById(R.id.clear);Button deleteAllButton = (Button)findViewById(R.id.delete_all);Button queryButton = (Button)findViewById(R.id.query);Button deleteButton = (Button)findViewById(R.id.delete);Button updateButton = (Button)findViewById(R.id.update);addButton.setOnClickListener(addButtonListener);queryAllButton.setOnClickListener(queryAllButtonListener);clearButton.setOnClickListener(clearButtonListener);deleteAllButton.setOnClickListener(deleteAllButtonListener);queryButton.setOnClickListener(queryButtonListener);deleteButton.setOnClickListener(deleteButtonListener);updateButton.setOnClickListener(updateButtonListener);dbAdepter = new DBAdapter(this);dbAdepter.open();}OnClickListener addButtonListener = new OnClickListener() { @Overridepublic void onClick(View v) {People people = new People(); = nameText.getText().toString();people.Age =Integer.parseInt(ageText.getText().toString());people.Height =Float.parseFloat(heightText.getText().toString());long colunm = dbAdepter.insert(people);if (colunm == -1 ){labelView.setText("添加过程错误!");} else {labelView.setText("成功添加数据,ID:"+String.valueOf(colunm));}}OnClickListener queryAllButtonListener = new OnClickListener() { @Overridepublic void onClick(View v) {People[] peoples = dbAdepter.queryAllData();if (peoples == null){labelView.setText("数据库中没有数据");return;}labelView.setText("数据库:");String msg = "";for (int i = 0 ; i<peoples.length; i++){msg += peoples[i].toString()+"\n";}displayView.setText(msg);}};OnClickListener clearButtonListener = new OnClickListener() {@Overridepublic void onClick(View v) {displayView.setText("");}};OnClickListener deleteAllButtonListener = new OnClickListener() { @Overridepublic void onClick(View v) {dbAdepter.deleteAllData();String msg = "数据全部删除";labelView.setText(msg);}};OnClickListener queryButtonListener = new OnClickListener() { @Overridepublic void onClick(View v) {int id = Integer.parseInt(idEntry.getText().toString());People[] peoples = dbAdepter.queryOneData(id);if (peoples == null){labelView.setText("数据库中没有ID为"+String.valueOf(id)+"的数据");return;}labelView.setText("数据库:");displayView.setText(peoples[0].toString());}};OnClickListener deleteButtonListener = new OnClickListener() { @Overridepublic void onClick(View v) {long id = Integer.parseInt(idEntry.getText().toString());long result = dbAdepter.deleteOneData(id);String msg = "删除ID为"+idEntry.getText().toString()+"的数据" + (result>0?"成功":"失败");labelView.setText(msg);}};OnClickListener updateButtonListener = new OnClickListener() { @Overridepublic void onClick(View v) {People people = new People(); = nameText.getText().toString();people.Age =Integer.parseInt(ageText.getText().toString());people.Height =Float.parseFloat(heightText.getText().toString());long id = Integer.parseInt(idEntry.getText().toString());long count = dbAdepter.updateOneData(id, people);if (count == -1 ){labelView.setText("更新错误!");} else {labelView.setText("更新成功,更新数据"+String.valueOf(count)+"条");}}};}。