Android实验报告_基于SQLite的通信录
系统分析设计安卓通讯录课程设计报告书

2015-2016学年第1学期《系统分析与设计》课程设计项目名称:基于安卓系统的手机通讯录指导教师:王娟班级:13级Java1班学生名单:第一章项目介绍选题:鉴于本次课程设计的目的是通过一些实际的例子,培养学生分析和解决实际问题的能力,培养学生综合应用基本概念、基本原理和技术方法的能力,真正做到学以致用,使课本上抽象的理论、方法与具体的实践应用相结合,所以我们组选择了安卓通讯录这个课题。
背景:Android本意词是指“机器人”,同时也是Goole于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,Android是一种基于Linux的自由及开放源代码的操作系统,Android以其自由开放源代码的特点而成为最热门的智能手机。
在这个信息化的时代,手机已成为继固话之后最为通俗的交流工具,“通讯”成了生活的必需品,这就有了系统下人与人之间的多样联系方式——手机通讯录。
传统通讯录以纸张为载体,将需要记录的联系人一一人登记在册,包括地址、联系方式等,再在需要时进行翻阅查询。
手机通讯录,在手机系统下,占用手机相对很小的空间,系统的记录联系人的联系方式及其他信息,不仅突破了各种条件的舒服,减轻了机主的负担,更方便了使用者的通讯。
综上所述,手机通讯录管理系统是一个高效、实时、绿色环保的管理系统。
然而现在很多通讯录外观花哨、功能单一或形同虚设。
针对以上各种弊端,我们通过需求分析等着手设计一款简单方便的通讯录。
项目:本项目的设计工作如下:选题、分组、任务划分,需求建模(需求基本描述,用例图和用例描述),系统分析(查找分析类,序列图和活动图),系统设计(功能设计——程序流程图,数据库设计,界面设计——原型图)。
本项目使用eclipse开发平台,并连接使用SQlite数据库编写。
分为后台数据库的建立和维护,以及前端应用程序的开发两个部分,主要包括添加、删除、修改联系人姓名、电话、住址等。
组员分工:需求分析(用例描述):杨赓系统分析(时序图、协作图、类图):张坤鹏郑四林王文凯王浩系统设计(数据库、界面设计):王浩整理总结:王浩第二章需求分析2.1 基本功能需求(1) 用户通过联系人功能可以保存联系人的详细信息,可以对联系人进行编辑、删除,可以根据索引条件搜索联系人。
基于Android的通讯录实时同步功能

基于Android的通讯录实时同步功能陆少鹏;周渊平【摘要】随着Android系统的不断发展,Android系统被应用在各种设备上面,包括将Android系统应用到有线电话上.因此需要开发一个通讯录能够在搭载了Android系统的有线电话和手机之间实现数据实时同步.通讯录的客户端和服务端是通过Socket来建立连接的,然后采用Handler机制发送数据和读取数据,实现了通讯录数据的实时同步.经过测试,通讯录实现了手机与有线电话的通话记录,增加、修改和删除联系人的实时同步功能.%With the continuous development of Android system, the Android system has been used in a variety of devices, including applying to wire telephones. Therefore, we need to develop a contact which has the real-time synchronization function between wire telephone and mobile phone equipped with Android system. The contact establishes connection between client and server by using Socket, and using Handler mechanism to send data and read data, as a result, it realizes the function of the real-time synchronization for contact data. The test shows the contact achieves the goal of the real-time synchronization function of calling records, adding, modifying and deleting contacts between mobile phone and wire telephone.【期刊名称】《计算机系统应用》【年(卷),期】2017(026)005【总页数】5页(P257-261)【关键词】Android;通讯录;实时同步;socket;Handler【作者】陆少鹏;周渊平【作者单位】四川大学电子信息学院, 成都 610065;四川大学电子信息学院, 成都610065【正文语种】中文日常办公通讯通常使用固定电话,它具有抗干扰能力强,通话质量好,保密性高的特点,最突出的是辐射小[1],因此在室内办公时,用户更加趋向于使用有线电话.在这种情况下,将手机和有线电话的通讯录结合开发,实现在室外办公时能够实时同步有线电话的未接来电信息,方便即时回复未接来电,在室内办公时也能够实时同步手机的未接来电和联系人信息,方便电话拨打.目前的通讯录同步是为了解决一个用户的不同终端设备的用户数据备份不一致给用户带来不便的问题,需要用户手动上传和下载用户数据才能够实现通讯录同步[2].现在Android系统的通讯录同步比较典型的应用是小米云同步服务,其包括了通话记录同步、便签同步和短信等用户数据的同步[3],但是小米云同步也需要手动上传和下载数据进行数据同步,并不是自动进行同步的,而且是实现手机与手机之间或者是手机与平板电脑之间的数据同步.本文所做的通讯录的实时同步和现在的通讯录同步不同的是,该通讯录实现的是实时的和自动的通讯录数据同步,因此实时性比现有的通讯录同步好,由于是自动实现通讯录数据同步,所以该通讯录同步操作比现有的通讯录同步简便.而且同步的是手机和有线电话的通讯录数据库数据方便室内外的办公.本文所介绍的有线电话是由搭载了Android4.0操作系统的TQ210开发板实现的,具备了拨号的功能. Android系统架构采用了分层架构,从高层到低层依次分为应用程序层、应用程序框架层、系统运行库层和Linux核心层[4,5],如图1.应用程序层所有的程序都是JAVA语言所编写,通过调用应用程序框架层所提供的API来完成的[6]. Android的系统运行库层分为程序库和Android运行库.程序库主要包含一些C/C++库,这些库能够被Android系统的不同组件使用,它们通过应用程序框架层给开发者提供服务.Android运行库提供Java变成语言核心库大部分功能.Android的 Linux核心层是基于Linux2.6内核的,是硬件和软件之间的抽象层.通讯录同步系统主要分为客户端和服务器端,它们之间通过Socket建立连接.常用的Socket有两种:流式Socket和数据报式Socket.流式Socket是一种面向连接的TCP服务应用,数据报式Socket是一种无连接的UDP服务应用.通讯录的实时同步功能的客户端和服务端是采用了流式Socket,其原理框图如图2所示.由图2可知,通讯录的实时同步分为两个方向,分别为:手机端实时同步有线电话的通讯录数据和有线电话实时同步手机端的通讯录数据.当有线电话端的通讯录数据库发生变化时,有线电话端就会将发生变化的数据转换成输出流,并将该输出流发送给服务器端,服务器端读取到该输出流数据后将它转换为输出流供手机端读取该同步数据,该过程实现了手机端实时同步有线电话端的通讯录数据,如图2中灰色线过程.有线电话端实时同步手机端通讯录数据的过程就是红色线过程,即当手机端的通讯录数据库发生变化时,手机端就将变化的数据转换成输出流并将该输出流发生给服务器端,服务器端读取到该数据后再将该数据转换为输出流供有线电话端读取同步数据,最终实现有线电话通讯录实时同步手机端的通讯录数据.通讯录的的实时同步功能主要包括四个部分:通话记录、添加联系人、删除联系人和修改联系人的实时同步.客户端的程序流程图如图3.客户端的实现主要分为两个部分,一个部分是判断客户端是否连接网络,连接网络就将同步数据发送到服务器端,未连接网络就将同步数据存到SQLite数据库中.另一部分就是要实时监听通讯录数据库的数据变化,有数据变化时就发送数据到服务端,没有数据变化时就处于不断监听状态.客户端为了能够将同步数据发送到服务器端需要处于连接网络的状态,所以,在发送数据之前必须先检查客户端是否连接网络.客户端用getSystemService (Context.CONNECTIVITY_SERVICE)方法来获取ConnectivityManger类的对象,然后再通过该对象的getAllNetworkInfo()方法来获取到客户端的所有网络连接情况的对象,最后再使用该对象的getState()方法来判断客户端网络连接情况并且与NetworkInfo. state.CONNECTED对比判断是否相等就可以判断出客户端是否处于连接网络的状态.如果上面的判断结果是客户端未连接网络,则将同步数据存储在SQLite数据库中.SQLite数据库是通过继承SQLiteOpenHelper类来实现的.该数据库里面创建了两个表,分别为联系人表和通话记录表,分别用于存储联系人同步数据和通话记录同步数据.如果客户端判断为处于连接网络状态,则先将SQLite 数据库中存储的所有同步数据和客户端数据库刚更新的同步数据发送到服务器端.每当将SQLite数据库中的同步数据发送出去之后,就会调用SQLite数据库的delete()方法将旧的数据删除掉,方便之后的操作.要实现数据的实时同步首先得通过使用ContentObserver内容观察者监听通话记录数据库数据和联系人数据库的变化.假设手机有来电或则去电致使手机端的通话记录数据库数据发生变化或者手机端有对联系人数据库进行增加、删除或修改的操作致使联系人数据库发生变化,就会触发ContentObserver里面的onChange()方法,然后就可以在这个方法里面去获取新的数据并且通过out.println()把该条数据发送给服务器端.同时,有线电话端就可以通过重写Handler机制的handleMessage()方法来从服务器端获取到同步数据.有线电话端获取到同步数据之后,读取同步数据的标志位flag来判断该条数据是属于通话记录类型的还是联系人数据类型的.如果该条数据属于通话记录数据类型的,就需要将同步数据与本地通话记录数据库数据进行对比,如果该条同步数据是本地数据则不进行任何操作,如果同步数据非本地数据就需要通过Util.AddNumToCallLog()把同步数据插入到通话记录数据库中.如果这条数据是联系人数据类型的,也需要将该条同步数据与本地联系人数据库数据进行对比,如果该条数据属于本地数据库则不进行任何操作,否则通过 Util.AddContact()、Util.ChangeCotact()和Util.DeleteContact()分别对联系人数据库进行添加、修改和删除操作.通话记录数据库或则联系人数据库完成数据更新之后,就会触发加载器Loader的回调机制onLoadFinished()方法通知最终的运行结果,之后就会调用适配器的notifyDataSetChanged()方法,即当适配器的内容发生变化时通过这个方法强制调用getView来刷新每个item的内容,可以实现动态刷新列表从而动态更新UI界面.通过以上步骤有线电话端就可以实现实时同步手机端的数据了,反之同样可以实现手机端实时同步有线电话端的数据.客户端的Android程序是在Eclipse中建立的,在工程中建立了通话记录功能包、联系人功能包和内容观察者功能包等,这些功能包里面的Java代码分别实现了通讯录的联系人功能和显示通话记录功能等,其Android工程目录如图4所示.服务器端是采用ServerSocket创建的TCP服务端.服务器端程序流程图如图5所示.服务器端为了实现与客户端的连接,首先得使用ServerSocket()构造器创建一个服务器端的对象,然后在while(true)代码块里面使用server类的accept()方法不断地监听等待来自客户端的连接请求.由于,服务端得实现来自多个客户端的连接请求,所以,得使用Executors类下面的newCachedThreadPool()方法来存储多个客户端的连接请求并且得使用Java的多线程技术来分别处理来自不同客户端的连接请求.当服务器端监听到了来自客户端的连接请求之后,就会和客户端建立连接并且将该客户端添加到连接池中.与客户端建立连接之后,为了能够获取到客户端的同步数据,需要在服务器端使用Socket对象的getInputStream()方法来获取输入流对象,并且使用输入流对象的readLine()方法来读取来自客户端输出的同步数据.实现了服务器端的接收数据功能之后,就需要对所接收到的数据进行合法性判断.如果接收到的同步数据是不合法的就将该丢弃该同步数据并且不做任何操作,如果该同步数据合法就需要将该合法的同步数据发送给客户端.因此,服务器端为了能够将同步数据发送给客户端,服务器端需要使用 Socket对象的getOutputStream()方法获取输出流对象,然后使用输出流对象的println()将同步数据发送出去.实现上述功能之后,客户端就可以从服务器端读取到同步数据了.服务器端功能实现是在集成开发环境Eclipse中使用Java编程语言编写的,其工程目录如图6所示.测试系统能否正常工作分为以下几步[7,8]:① 将TQ210开发板和电话模块连接起来,组成系统测试所需要的搭载了Android 系统的有线电话,并打开开发板电源.② 打开Eclipse集成开发环境,首先启动服务器端的程序,使服务器处于工作状态.然后,在手机端和有线电话端安装通讯录的apk,并且使手机端和有线电话端的通讯录都处于工作状态.③ 测试联系人模块的实时同步功能,首先,进入手机端和有线电话端通讯录的联系人操作界面.然后,在手机端新增一个联系人保存该联系人之后,此时可以看到手机端和有线电话端同时新增了同一个联系人.如图7所示.④ 在手机端通讯录编辑刚才新添加的联系人,把该联系人的电话号码进行修改,保存之后可以观察到手机端的联系人和有线电话端的联系人的电话号码同时发生了改变.如图8所示.⑥ 手机和有线电话同时进入通讯录的通话记录界面,然后向手机拨打电话,通话结束后可以看到手机和有线电话的通话记录同时更新了同一条信息,可以通过观察通话记录上面的时间确定通话记录的实时同步.如图10所示.经过上面的测试结果可以知道,该通讯录实现了通话记录和增加、修改和删除联系人的实时同步功能.经过上面的测试,可以得出结论:该通讯录具有在通话记录和添加、删除、修改联系人的实时同步功能.事实上,可以把这个实时同步功能应用到办公人员的手机和办公电话上.当办公人员在外工作时,如果办公电话有未接来电时,办公人员可以即时知道这条来电信息并及时回复.也可以将该通讯录应用到具有多部手机的用户的手机上,只要每部手机都安装了该通讯录,就可以实现多部手机的通讯录数据的实时同步,这样可以免去用户在多部手机的同一个联系人进行相同的添加、删除和修改的操作.再则,随着4G和5G的发展,手机在室内的通话质量越来越差,在室内使用有线电话通话会比手机好,所以实现这个实时同步功能可以方便用户在有线电话上拨打手机端的联系人,免去查询电话号码的麻烦.因此,这个通讯录的实时同步功能具有很好应用前景.1薛莹,徐慨,黄麟舒.来电显示电路的设计.舰船电子工程, 2008,28(9):44–47.2马庆钟,姜弢.基于SyncML的CooTalk通讯录同步设计与实现[硕士学位论文].哈尔滨:哈尔滨工程大学,2013.3李辉,杨若瑜.基于安卓手机的信息云同步系统的设计与实现[硕士学位论文].南京:南京大学,2014.4熊积健,王琪.基于S5PV210平板电脑的设计.江西通信科技,2012,(1):12–15.5姚昱旻,刘卫国.Android的架构与应用开发研究.计算机系统应用,2008,17(11):110–112.6凡威,周渊平.基于Android平台的无线视频监控.计算机系统应用,2015,24(1):195–198.7杜江,周渊平.基于Android的电话拨号功能.计算机系统应用,2014,23(12):245–248.8陈成伟,周渊平.基于Android的有线电话CID功能.计算机系统应用,2016,25(1):85–89.。
使用sqliteopenhelper实现简易通讯录实训报告

实训报告:使用SQLiteOpenHelper实现简易通讯录一、实训目标通过本次实训,掌握SQLite数据库的基本操作,使用SQLiteOpenHelper类创建、打开、升级数据库,以及在Android应用程序中实现简易通讯录功能。
二、实训步骤1.创建SQLite数据库2.使用SQLiteOpenHelper类创建数据库。
首先,创建一个继承自SQLiteOpenHelper的类,并重写onCreate()和onUpgrade()方法。
在onCreate()方法中执行创建表的SQL语句,onUpgrade()方法用于升级数据库时执行更新表的SQL语句。
3.实现通讯录功能4.在通讯录界面上,显示联系人列表。
当用户点击某个联系人时,显示该联系人的详细信息。
实现添加、删除、修改和查询联系人操作。
5.实现数据绑定6.使用Data Binding库将数据绑定到界面上。
在布局文件中定义变量,通过布局文件与Java代码的双向绑定,将联系人数据显示在界面上。
7.实现增删改查操作8.通过SQLiteOpenHelper类提供的insert()、update()、delete()和query()方法实现增删改查操作。
将操作封装在DAO(Data Access Object)类中,方便进行数据操作。
9.测试应用程序10.运行应用程序,测试通讯录功能是否正常工作。
检查添加、删除、修改和查询联系人操作是否能够正确执行。
三、实训总结通过本次实训,我掌握了SQLite数据库的基本操作,了解了如何使用SQLiteOpenHelper 类创建、打开和升级数据库。
同时,我也学会了在Android应用程序中实现简易通讯录功能,包括数据绑定和增删改查操作。
通过实际操作,我对Android应用程序开发有了更深入的理解。
在未来的学习和工作中,我将继续深入学习Android开发技术,提高自己的技能水平。
基于android的手机通讯录(附程序)

20xx-20xx 学年x 学期xxxx大学电工电子实验教学中心创新性实验研究报告实验项目名称—基于android 的手机通讯录—组长姓名XXX ______ 学号XXXXXXXXXXXXXXX联系电话xxxxxxxxxxxx E-mail xxxxxxxxxxxx@成员姓名xxx _______ 学号xxxxxxxxxxxxx成员姓名XXX _____ 学号XXXXXXXXXXXXXXX专业电子信息工程班级20XX级x班指导教师及职称亠_____________________________20xx 年x 月x 日、实验摘要二、实验目的三、实验场地及仪器、设备和材料:场地:实验室设备及仪器:Java SDK, Eclipe软件,PC机一台四、实验内容2、实验内容开发流程见下图:i增加、删除、编联系人点击通信录界面中的增加按钮,入增加联系人面。
输入联系人的基本信息,并可根据用户需求增加个性化信息如头像、姓名、手机号码、办室电话、家庭电话、职务职称、单位名称、地址、邮政编码、Email、其他联系方式、备注这些信息,击确认返回主界面。
点击通信录中一个已存在的联系人,进入联系人编辑界面,可修改系人的资料或进行删除联系人操作,完成后退回到主界面。
对列表中联系人的标记,点mnu键弹出功能界面上的删除按键也可进行删除。
还可以在菜单上选择删除全部联系人清空通讯录。
在删除联系人的过程中,系统将提示用户是否继续操作,若放弃操作,则系人信息将继续保存。
2 、查找联系人用户点击menu键打开底部菜单框,底部菜单框为查询系人提供入口,进入通讯录的缺省页面为联系人列表,在列表中看到所有联系人的姓名、电话息排列,用户点击查找按键输入联系人基本信息,通讯录显所有符合查询条件的联系人列表,用户选择一个联系人进入联系人基本信息页面进行其他操作;查询完成,用户按返回键返回主界面。
3 、通功能用户在通录选择联系人进入联系详细信息界面,这时点击menu键打开通信功能框,选择打电话、发信息的功能进行操作。
安卓实验报告

安卓实验报告Android是目前全球最为流行的操作系统之一,其强大的应用程序生态系统和广泛的设备兼容性使得安卓成为开发者和用户的首选。
本文将介绍我在安卓实验中进行的一系列任务和实验结果。
实验一:安装开发环境在进行安卓开发之前,我们首先需要安装必要的开发环境。
我使用的是Android Studio,这是谷歌官方提供的开发工具,具有强大的功能和友好的用户界面。
通过安装Android Studio,我成功搭建了安卓开发环境,并进行了一些基本的配置。
实验二:创建第一个安卓应用程序根据老师的指导,我按照步骤成功创建了我的第一个安卓应用程序。
我选择了一个简单的计算器应用程序作为开始,它可以实现基本的加法和减法功能。
通过这个实验,我学会了使用Android Studio的界面设计工具和编写基本的Java代码。
实验三:UI设计和布局在这个实验中,我学习了安卓应用程序的用户界面设计和布局。
我使用了安卓提供的各种布局方式,如线性布局、相对布局和帧布局等,来设计和展示应用程序的不同界面。
通过这个实验,我对安卓界面设计的原则和技巧有了更深入的理解。
实验四:应用程序调试与测试在开发过程中,调试和测试是非常重要的环节。
通过Android Studio提供的调试工具,我能够针对应用程序中的问题进行定位和修复。
我还学会了使用模拟器和真机进行应用程序的测试,以确保应用程序的功能和稳定性。
实验五:数据库操作在这个实验中,我学习了如何在安卓应用程序中使用数据库。
我使用了SQLite数据库来存储和管理应用程序的数据。
通过编写SQL语句,我能够进行数据的插入、查询、更新和删除等操作。
这为我今后的应用程序开发提供了非常有用的技能。
总结:。
Android学习之SQLite数据库存储

Android 学习之SQLite 数据库存储•引⾔概念 SQLite 数据库,和其他的SQL 数据库不同, 我们并不需要在⼿机上另外安装⼀个数据库软件,Android 系统已经集成了这个数据库;特点SQLite 是⼀个轻量级的关系型数据库,运算速度快,占⽤资源少,很适合在移动设备上使⽤不仅⽀持标准SQL 语法,还遵循ACID(数据库事务)原则,⽆需账号,使⽤起来⾮常⽅便SQLite ⽀持五种数据类型NULLinteger (整型)real(浮点型)text(⽂本类型)blob(⼆进制类型)SQLite 通过⽂件来保存数据库⼀个⽂件就是⼀个数据库数据库中⼜包含多个表格表格⾥⼜有多条记录每条记录由多个字段构成每个字段都有对应的值•创建数据库 Android 为了让我们能够更加⽅便地管理数据库,专门提供了⼀个 SQLiteOpenHelper 帮助类; 借助这个类就可以⾮常简单地对数据库进⾏创建和升级。
SQLiteOpenHelper 是⼀个抽象类,这意味着如果我们想要使⽤它的话,就需要创建⼀个⾃⼰的帮助类去继承它; SQLiteOpenHelper 中有两个抽象⽅法,分别是 和 ;: 数据库第⼀次被创建时被调⽤: 在数据库的版本发⽣变化时会被调⽤⼀般在软件升级时才需改变版本号,⽽数据库的版本是由程序员控制的假设数据库现在的版本是 1,由于业务的变更,修改了数据库表结构,这时候就需要升级软件,升级软件时希望更新⽤户⼿机⾥的数据库表结构为了实现这⼀⽬的,可以把原来的数据库版本设置为 2,或者其他与旧版本号不同的数字即可 我们必须在⾃⼰的帮助类⾥⾯重写这两个⽅法,然后分别在这两个⽅法中去实现 创建、升级数据库 的逻辑。
SQLiteOpenHelper 中还有两个⾮常重要的实例⽅法: 和 。
这两个⽅法都可以 创建或打开 ⼀个现有的数据库(如果数据库已存在则直接打开,否则创建⼀个新的数据库), 并返回⼀个可对数据库进⾏读写操作的对象。
安卓实习报告

通信与电子信息专业实训报告项目名称:基于android的游戏开发班级 10通信1班姓名学号指导教师成绩实训时间:年月日—目录一、实训目的及其意义 (3)1.1、目的及意义 (3)1.2、研究现状 (3)二、实训主要任务、重点及难点 (4)2.1、任务 (4)2.2、重点内容及实现途径 (4)三、实训具体内容及完成的主要工作 (5)3.1、认识基础开发 (6)3.2、了解数据存储 (6)3.3、总体实训过程 (7)四、实际遇到的困难,解决问题的方法和措施 (8)(一)、所遇问题 (8)(二)、解决方法与措施 (9)五、心得体会 (9)一、实训目的及其意义1.1、目的及意义了解现阶段互联网发展主流,了解移动互联网,认识移动互联网的发展与展望,认识android,了解基于android的应用软件开发方法及其商业流程。
把理论与实际结合,通过对理论知识的理解,领悟从而运用到生活实际巩固所学的知识,提高对实际生活的认识,积累经验。
使学生在此期间能够初次体会到实际生产中的种种技能与经验,完成一项项目锻炼独立思考及团队合作能力。
使学生们进一步加深对所学知识的理解,理论联系实际,巩固所学有关计算机基础理论知识和基本技能,学习有关计算机最新技术方面的应用,增强学生对计算机在社会生活,社会生产中应用的感性认识,深入了解计算机在各个领域中的应用状况。
生产实习是学校教学的重要补充部分,是区别于普通学校教育的一个显著特征,是教育教学体系中的一个不可缺少的重要组成部分和不可替代的重要环节。
它是与今后的职业生活最直接联系的,学生在生产实习过程中将完成学习到就业的过渡,因此生产实习是培养技能型人才,实现培养目标的主要途径。
它不仅是校内教学的延续,而且是校内教学的总结。
生产实习一方面巩固了书本上学到的理论知识,另一方面,可获得在书本上不易了解和不易学到的生产现场的实际知识,使我们在实践中得到提高实训环节对于提高学生的综合能力和全面素质具有重要意义。
在Android应用中利用SQLite进行本地数据库操作

在Android应用中利用SQLite进行本地数据库操作随着移动应用的不断发展,电子设备成为人们生活中不可或缺的一部分。
而Android操作系统作为最广泛使用的移动操作系统之一,它提供了强大的开发平台,为开发者们提供了各种各样的开发工具和API。
其中,SQLite作为Android应用中的一种轻量级数据库管理系统,被广泛应用于数据存储和管理。
本文将介绍在Android应用中通过SQLite实现本地数据库操作的方法。
1. 简介SQLite是一种无服务器的自包含的数据库引擎,它在Android操作系统中作为默认的关系型数据库引擎。
它无需独立的服务器进程,将数据库引擎与应用程序合并在一起,使得应用程序可以直接操作数据库。
SQLite在移动设备上非常流行,因为它占用的磁盘空间相对较少,并且提供了性能高效的操作方式。
2. 创建数据库在Android应用中使用SQLite进行本地数据库操作,首先需要创建一个数据库。
Android提供了SQLiteOpenHelper类来管理数据库的创建和升级。
在创建数据库之前,首先需要定义数据库的结构,包括表的结构和字段信息。
接着,通过继承SQLiteOpenHelper类,重写onCreate()方法和onUpgrade()方法,可以自动创建数据库和升级数据库。
3. 创建表使用SQLite进行本地数据库操作时,需要在数据库中创建表来存储数据。
通过执行SQL语句,可以在数据库中创建表以及定义表中的字段信息。
SQLite支持多种数据类型,包括整型、浮点型、文本型等。
通过在SQL语句中指定字段的名称和类型,可以创建适合应用需求的表。
4. 插入数据插入数据是在数据库中进行本地数据库操作的常见操作之一。
通过执行SQL 语句的INSERT INTO语句,可以将数据插入到数据库的表中。
通过使用ContentValues类,可以方便地设置插入数据的字段值。
通过调用SQLiteDatabase 类的insert()方法,可以执行插入数据的操作。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一次实验Android界面设计一. 实验目的及实验环境1. 实验目的1)掌握SQLiteOpenHelper类结构2)掌握基于SQLite数据库的应用开发过程3)掌握Content Provider发布数据的方法4)掌握Content Resolver获取数据的方法2.实验环境系统开发平Android Studio 3.0系统开发平台:Android 7.1运行平台:Windows10 x64运行环境: Framework SDK 2.0二. 实验教材、组织方式、实验容1.实验教材:Andorid开发与应用2.组织方式:个人独立完成2.实验容:实现基于SQLite数据库的通信录应用,通过单击增加图标打开添加通信录界面,通过单击通信录中的各条信息可删除选中项。
三.方案设计Android系统中集成了SQLite数据库,并且为数据库的操作提供了相关的类和方法,便于没有数据库开发经验的开发者编写程序。
另外,Android平台中利用Content Provider机制来实现跨应用程序数据共享。
一个应用程序可以通过Content Provider来发布自己的数据,其他的应用程序可以通过Content Resolver来获取共享数据。
四.运行结果五.总结通过这次实验掌握了SQLite OpenHelper类结构,掌握了基于SQLite数据库的应用开发过程以及Content Provider发布数据的方法和掌握Content Resolver 获取数据的方法。
六.附录:源代码主布局文件activity_main.xml:<LinearLayout xmlns:android="schemas.android./apk/res/android"<TextViewandroid:id="+id/title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="通信录"/><ListViewandroid:id="+id/listView"android:layout_width="wrap_content"android:layout_height="wrap_content"></ListView> <Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="add"/></LinearLayout>添加联系人布局文件addrelation.xml:<?xml version="1.0"encoding="utf-8"?><LinearLayout xmlns:android="schemas.android./apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:layout_height="wrap_content"android:text=""/><EditTextandroid:id="+id/addName"android:layout_width="wrap_content"android:layout_height="wrap_content"/> <TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text=""/><EditTextandroid:id="+id/addTel"android:layout_width="wrap_content"android:layout_height="wrap_content"/> <TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="所属组"/><Spinnerandroid:id="+id/addGroup"android:layout_width="wrap_content"android:entries="array/test"></Spinner><Buttonandroid:id="+id/save"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:text=" 保存"/></LinearLayout>主Activity文件MainActivity.java:import android.support.v7.app.ActionBarActivity;import android.app.AlertDialog;import android.app.Application;import android.content.DialogInterface;import android.content.Intent;import android.database.Cursor;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.AdapterView;import android.widget.ListView;import android.widget.SimpleCursorAdapter;public class MainActivity extends ActionBarActivity {private ListView listView;protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);listView = (ListView) findViewById(R.id.listView);// getRelationFromDB();}private void getRelationFromDB() {final DatabaseHelper dbHelper = new DatabaseHelper(this);Cursor cursor = dbHelper.query();String[] from = { "_id", "name", "tel", "groupName" };int[] to = { R.id._id, , R.id.tel, R.id.group };SimpleCursorAdapter scadapter = new SimpleCursorAdapter(this,yout.relationlist, cursor, from, to);listView.setAdapter(scadapter);listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { public void onItemClick(AdapterView<?> adapter, View view,int position, long id) {final long temp = id;AlertDialog.Builder adBuilder = new AlertDialog.Builder(MainActivity.this);adBuilder.setMessage("确认要删除记录吗?").setPositiveButton("确认",new DialogInterface.OnClickListener() {Overridepublic void onClick(DialogInterface dialog,int which) {// TODO Auto-generated method stubdbHelper.del((int) temp);Cursor cursor = dbHelper.query();String[] from = { "_id", "name", "tel","groupName" };int[] to = { R.id._id, ,R.id.tel, R.id.group };SimpleCursorAdapter scadapter = new SimpleCursorAdapter (getApplicationContext(),yout.relationlist, cursor,from, to);MainActivity.this.listView.setAdapter(scadapter);}}).setNegativeButton("取消",new DialogInterface.OnClickListener() {Overridepublic void onClick(DialogInterface dialog,int which) {}});AlertDialog aleraDialog = adBuilder.create();aleraDialog.show();}});dbHelper.close();}public void add(View view) {Intent intent = new Intent(MainActivity.this, AddrelationActivity.class);startActivityForResult(intent, 0x111);}protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data);if (requestCode == 0x111 && resultCode == 0x111) {getRelationFromDB();}}Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}Overridepublic boolean onOptionsItemSelected(MenuItem item) {// Handle action bar item clicks here. The action bar will// automatically handle clicks on the Home/Up button, so long// as you specify a parent activity in AndroidManifest.xml.int id = item.getItemId();if (id == R.id.action_settings) {return true;}return super.onOptionsItemSelected(item);}}添加联系人AddrelationActivity.javaimport android.app.Activity;import android.app.AlertDialog;import android.content.ContentValues;import android.content.DialogInterface;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.widget.EditText;import android.widget.Spinner;public class AddrelationActivity extends Activity {private EditText addName, addTel;private Spinner addGroup;protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.addrelation);addName = (EditText) findViewById(R.id.addName);addTel = (EditText) findViewById(R.id.addTel);addGroup = (Spinner) findViewById(R.id.addGroup);}public void save(View view) {final ContentValues values = new ContentValues();values.put("name", addName.getText().toString());values.put("tel", addTel.getText().toString());values.put("groupName", addGroup.getSelectedItem().toString());final DatabaseHelper dbHelper = new DatabaseHelper(getApplicationContext());final AlertDialog.Builder adBuilder = new AlertDialog.Builder(this);adBuilder.setMessage("确认保存记录吗?").setPositiveButton("确认", new DialogInterface.OnClickListener() {Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stubdbHelper.insert(values);Intent intent = getIntent();setResult(0x111, intent);AddrelationActivity.this.finish();}}).setNegativeButton("取消", new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int which) {}});AlertDialog aleraDialog = adBuilder.create();aleraDialog.show();}}。