1、Android Studio移动应用开发任务教程微课版教案4教学单元:移动应用开发(9)授课班级: 授课时间:2教学地点: 教学目的: 应知:1、了解SharedPreferences存储;2、了解基本SQL语句的使用 应会:1、 会使用SharedPreferences存放配置信息;2、 会使用基本SQL语句实现数据库的增删改查;3、 能完成简单Android程序的开发教学重点、难点:1 SharedPreferences的使用2 SQL语句的使用教学方法:根据本堂课教学内容的重点与难点,教学过程中主要采用以下教学方法:1 在理论教学上,主要在钉钉平台上进行,以讲授和教学演示为主,通过提问引
2、导学生发现问题、分析问题,掌握Android软件开发的基本概念和流程。2 在实践教学上,采用“实例引导,项目驱动”的方式讲授。通过实现相关实例,在实例基础上改造拓宽,真正实现“学以致用”。钉钉和QQ相结合,采用演示、实践和讨论相结合的模式。3 注重教学整体过程设计,依托网络平台,将课前预习、课中讲授与演练和课后练习与讨论答疑有机结合,不断摸索提高教学效果。教学过程设计:备注:1课程设计 (1)回顾上次课的内容,提出在Android中如何存储数据的问题(2)简单介绍Android本地存储的几种方式。(3)以记住密码功能为例,讲解SharedPreferences的使用。(4)首先,将QQDemo
3、V2改名为QQDemoV3(5)添加成员变量etQQName、etQQPwd和chkRememberPwd(6)通过findViewById()方法获取布局文件中的相应控件(7)实现当用户单击“登录”按钮时,如果勾选了“记住密码”选项,则首先将用户输入QQ号码和密码记录在SharedPreferences中,然后再跳转到“MainActivity”。btnLogin.setOnClickListener(new View.OnClickListener() Overridepublic void onClick(View v) if(chkRememberPwd.isChecked() Sha
4、redPreferences settings = getSharedPreferences(); setting,MODE_PRIVATE);SharedPreferences.Editor editor = settings.edit();editor.putString(qqnum,etQQName.getText().toString();editor.putSting(pwd,etQQPwd.getText().toString(); mit();Intent intent=new Intent(LoginActivity.this,MainActivity.class); star
5、tActivity(intent); );(8)了解学生进度 (9)运行后,打开Android Studio菜单,单击“Tool-”“Android”“Android Device Monitor”命令,打开DDMS,切换到“File Explore”,可以在相应的目录下找到“setting.xml”文件注意,此时模拟器可能会因为权限问题,无法看到相应的信息,需要进行授权DDMS中权限的处理(安装模拟器选用带Google Apis选项的,不要带Google Play选项的)进入cmd,切换到C:UsersadminnAppDataLocalAndroidsdkplatform-tools运行a
6、db root运行adb remount(大多数情况,已经可以看到相应目录了,如果不行则进行逐层授权)获取root权限运行adb shell键入su使用chmod 777 /data命令逐层授权(10) 在LoginActivity.java文件中,在onCreate()方法的末尾添加如下代码,实现当用户下次打开应用时,自动填入QQ号码和密码。SharedPreferences settings = getSharedPreferences(setting, MODE_PRIVATE);etQQName.setText(settings.getString(qqnum,);etQQPwd.se
7、tText(settings.getString(pwd,);(11)了解学生进度(12)回顾SQL基本语句以系统的登录和联系人功能为例。首先,我们需要实现系统登录,那么,我们需要有一张用户表-QQ_Login,这个表至少需要保存qq_num和qq_pwd,我们再看联系人界面,我们可以看到每个用户都有头像、名字、在线模式和签名,这些信息也需要保存,那么,是不是也应该添加在QQ_Login表中呢?另外,我们发现我们在联系人界面中,将联系人按照所属国家的不同进行了分组,那我们如何标识一个联系人属于哪个国家呢?-新建列belong_country。(13)安装SQLiteExpert个人版,创建一个
8、数据库TestDB,然后创建一张表QQ_Login,分别设置qq_num、qq_pwd、qq_name、qq_img、qq_online、 qq_action和belong_country。总结,如何创建一张表,如何定义列切换到DDL页,查看相应的生成CREATE TABLE QQ_Login( qq_num VARCHAR PRIMARY KEY NOT NULL, qq_name VARCHAR, qq_pwd VARCHAR, qq_img INT, qq_online VARCHAR, qq_action VARCHAR, belong_country VARCHAR);切换到SQL页
9、,练习insert语句,分别插入刘备、曹操、孙权和关羽insert into QQ_login(qq_num,qq_name,qq_pwd,qq_img,qq_online,qq_action,belong_country) values(1001,刘备,123456,1001,4G 在线,天天向上,蜀) 练习select语句,查询所有数据,提问如果要实现登录,应如何查询select * from QQ_Login where qq_num=1001 and qq_pwd=123456练习update语句,修改关羽所属国家,update QQ_Login set belong_country=
10、魏执行的结果是什么?引出为什么要设置主键,主键的作用是做什么的练习delete语句,删除一条关羽这条记录(14)了解学生进度(15)思考一下,如果我们要实现联系人功能,需要如何设计数据库。也就是描述谁是谁的联系人,我们是在QQ_Login表中设计,还是需要另外建一张表?如果是另外建,应该如何设计?-观察联系人界面所需的信息,哪些是重复的信息?能否去掉这些重复信息?-表的主键是什么?(16)结束本次课程,进入讨论答疑环节。 作业: 相关习题教学单元:移动应用开发(10)授课班级: 授课时间:2教学地点: 教学目的: 应知:1、了解SQLite数据库;2、了解如何使用程序访问SQLite数据库;
11、应会:4、 会使用SQLiteOpenHelper创建和管理数据库;5、 能实现登录功能;6、 能完成简单Android程序的开发教学重点、难点:3 SQLiteOpenHelper的使用4 实现登录功能教学方法:根据本堂课教学内容的重点与难点,教学过程中主要采用以下教学方法:4 在理论教学上,主要在钉钉平台上进行,以讲授和教学演示为主,通过提问引导学生发现问题、分析问题,掌握Android软件开发的基本概念和流程。5 在实践教学上,采用“实例引导,项目驱动”的方式讲授。通过实现相关实例,在实例基础上改造拓宽,真正实现“学以致用”。钉钉和QQ相结合,采用演示、实践和讨论相结合的模式。6 注重教
12、学整体过程设计,依托网络平台,将课前预习、课中讲授与演练和课后练习与讨论答疑有机结合,不断摸索提高教学效果。教学过程设计:备注:1课程设计 (1)回顾上次课的内容,提出在Android中如何访问SQLite数据库的问题。(2)在Java中我们通常采用JDBC访问数据库,但因为JDBC会消耗较多的系统资源,所以Android采用专门的一些API来访问SQLite-SQLiteDatabase。(3)一个SQLiteDatabase的实例就代表了一个SQLite的数据库,通过SQLiteDatabase实例的一些方法,我们可以执行SQL语句,对数据库进行增、删、查、改的操作。主要是execSQL和
13、rawQuery方法。(4)但是,如何获得和管理SQLiteDatabase对象呢-SQLiteOpenHelper,简单介绍SQLiteOpenHelper。(5)以登录功能为例,展示SQLiteOpenHelper的使用(6)新建dbutils包,在该包下,新建类“MyDbHelper”,继承自SQLiteOpenHelper,并重写相关方法构造器方法:采用默认形式这里,我们需要实现登录功能,主要使用QQ_Login表,所以我们需要在onCreate方法中创建一个数据表QQ_Login,并为其添加初始的数据public class MyDbHelper extends SQLiteOpen
14、Helper public MyDbHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) super(context, name, factory, version);Overridepublic void onCreate(SQLiteDatabase db) String sql=CREATE TABLE QQ_Login( + qq_num VARCHAR(20) PRIMARY KEY NOT NULL, + qq_name VARCHAR NOT NULL, +
15、qq_pwd VARCHAR NOT NULL, qq_img INT, + qq_online VARCHAR, qq_action VARCHAR, + belong_country VARCHAR); db.execSQL(sql); initData(db); private void initData(SQLiteDatabase db)String countries = new String 蜀, 魏, 吴 ;String nums = new String 1001, 1002, 1003, 1004, 1005, 1006 , 2001, 2002, 2003 , 3001,
16、 3002, 3003 ; String names = new String 刘备, 关羽, 张飞, 赵云, 黄忠, 魏延 , 曹操, 许褚, 张辽 , 孙权, 鲁肃, 吕蒙 ;int icons=new int R.drawable.liubei,R.drawable.guanyu,R.drawable.zhangfei, R.drawable.zhaoyun,R.drawable.huangzhong, R.drawable.weiyan,R.drawable.caocao,R.drawable.xuchu,R.drawable.zhangliao, R.drawable.sunquan
17、,R.drawable.lusu,R.drawable.lvmeng ; String sql=insert into QQ_Login(qq_num,qq_name,qq_pwd,qq_img, + qq_online,qq_action,belong_country) + values(?,?,?,?,?,?,?);for(int i=0;icountries.length;i+)for(int j=0;jnamesi.length;j+) db.execSQL(sql,new Objectnumsij,namesij,123456,iconsij,4G在线,天天向上,countriesi
18、); Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) (7)了解学生进度(8)根据QQ_Login表的定义,修改“cn.edu.szpt.qqdemov3.beans”包中的QQContact类,添加两个成员变量,以及对应的getter和setter方法和构造器方法。private String num;private String belong_country; (9) 切换到LoginActivity.java中,修改onCreate()方法中,登录按钮的监听器处理代码,实现本
19、地数据库验证功能。首先采用拼接SQL语句的方式实现,演示SQL注入式攻击,然后强调必须使用参数形式,btnLogin.setOnClickListener(new View.OnClickListener() Overridepublic void onClick(View v) MyDbHelper helper = new MyDbHelper(getApplicationContext(), QQ_DB, null, 1); SQLiteDatabase db = helper.getReadableDatabase(); String sql = select * from QQ_Lo
20、gin where qq_num=? and qq_pwd=?; Cursor cursor = db.rawQuery(sql, new StringetQQName.getText().toString(), etQQPwd.getText().toString();if (cursor.moveToNext() /登录成功,跳转到登录后界面 else Toast.makeText(getApplicationContext(),用户名或密码错误, Toast.LENGTH_LONG).show(); );(10)了解学生进度(11)因为我们每次访问数据库都需要创建MyDbHelper对象
21、,如果我们后面数据库名称和版本发生变化,我们需要修改的地方太多,所以,我们可以把这些信息放在一个常量里面。(12)在dbutils包中,新建类“Db_Params”,以静态常量形式存放数据库的相关参数。并修改相应的代码public class Db_Params public static final String DB_NAME=QQ_DB;public static final int DB_VER=1;(13)登录成功后,我们需要在界面上显示登录用户的头像,并显示与之相关的消息信息和联系人信息,因此,我们需要在多个类中使用当前登录的用户信息,为了方便使用,我们在MainActivity.
22、java中,添加一个公有的静态变量loginedUser,用以存放登录用户的相关信息。当登录成功后,跳转到MainActivity之前,添加如下语句,将登录用户的信息保存在loginedUser。MainActivity.loginedUser = new QQContactBean( cursor.getString(cursor.getColumnIndex(qq_num), cursor.getString(cursor.getColumnIndex(qq_name), cursor.getInt(cursor.getColumnIndex(qq_img), cursor.getStri
23、ng(cursor.getColumnIndex(qq_online), cursor.getString(cursor.getColumnIndex(qq_action), cursor.getString(cursor.getColumnIndex(belong_country);(14)当登录成功后,更新联系人界面上的登陆用户头像。打开QQContactFragment.java文件,添加成员变量logined_img指向界面中的ImageView控件private ImageView logined_img;在onCreateView()方法中,通过findViewById()方法找到
24、相应的控件,然后实现登录用户头像显示功能。logined_img = (ImageView) view.findViewById(R.id.imgLoginIcon);logined_img.setImageResource(MainActivity.loginedUser.getImg();(15)结束本次课程,进入讨论答疑环节。 作业: 相关习题教学单元:移动应用开发(11)授课班级: 授课时间:6教学地点: 教学目的: 应知:1、了解SQLite数据库的使用;2、了解如何使用程序访问SQLite数据库; 应会:7、 会使用DialogFragment创建对话框;8、 能实现联系人显示、添
25、加和删除功能;9、 能完成简单Android程序的开发教学重点、难点:5 实现联系人显示、添加和删除6 DialogFragment的使用教学方法:根据本堂课教学内容的重点与难点,教学过程中主要采用以下教学方法:7 在理论教学上,主要在钉钉平台上进行,以讲授和教学演示为主,通过提问引导学生发现问题、分析问题,掌握Android软件开发的基本概念和流程。8 在实践教学上,采用“实例引导,项目驱动”的方式讲授。通过实现相关实例,在实例基础上改造拓宽,真正实现“学以致用”。钉钉和QQ相结合,采用演示、实践和讨论相结合的模式。9 注重教学整体过程设计,依托网络平台,将课前预习、课中讲授与演练和课后练习
26、与讨论答疑有机结合,不断摸索提高教学效果。教学过程设计:备注:1课程设计 (1)回顾上次课的内容,提出本课的目标是实现联系人界面中的显示功能(2)要实现联系人的管理,我们需要新建一张表QQ_Contact,用以记录每个用户的联系人关系,其中contactId为主键,自动增量;qq_num表示联系人的QQ号码;belong_qq表示联系人所属用户的QQ号码。(3)这张表描述了每个用户有哪些联系人,但是我们观察一下联系人的界面,发现我们还需要每个联系人的信息,比如头像、姓名等。那么这就涉及了表的连接,多表连接包括内连接、外连接、左外连接、右外连接。SQLite只有内连接和左外连接,使用QQ_DB演
27、示两种连接方式(4)为了方便访问,我们再定义一个视图view_Contact,将QQ_Contact表左连接QQ_Login表,SQL语句如下:SELECT u.contactId, u.belong_qq, v.*FROM QQ_Contact u LEFT JOIN QQ_Login v ON u.qq_num = v.qq_num(5)了解学生进度(6)这里,我们需要更新数据库QQ_DB,但是,onCreate方法只是在第一次创建数据库才会调用,因此,这里我们需要删除已创建的数据库,操作如下:打开Android Device Monitor窗口。找到data/data/qqdemov3/
28、databases/目录,删除QQ_DB和QQ_DB-journal两个文件。(7) 打开QQDemoV3工程中“cn.edu.szpt.qqdemov3.dbutils”包下的MyDbHelper.java文件,修改onCreate()方法,在initData(db)方法调用前添加如下代码。/创建QQ_Contact表sql=CREATE TABLE QQ_Contact( +contactId INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, + qq_num VARCHAR NOT NULL, belong_qq VARCHAR NOT NULL);
29、 db.execSQL(sql);/创建view_Contact视图sql=CREATE VIEW view_Contact AS + SELECT u.contactId, u.belong_qq, v.* FROM QQ_Contact u + LEFT JOIN QQ_Login v ON u.qq_num = v.qq_num;db.execSQL(sql);(8)了解学生进度(9)修改MyDbHelper类中的initData()方法用来初始化数据。private void initData(SQLiteDatabase db)/。省略相关数组的定义,和初始化。此部分不变String sql=insert into QQ_Login(qq_num,qq_name,qq_pwd,qq_img, +qq_online,qq_action,belong_country) values(?,?,?,?,?,?,?);for(int i=0;icountries.length;i+)for(int j=0;jnamesi.length;j+)
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1