Android Studio移动应用开发任务教程微课版教案4.docx
《Android Studio移动应用开发任务教程微课版教案4.docx》由会员分享,可在线阅读,更多相关《Android Studio移动应用开发任务教程微课版教案4.docx(41页珍藏版)》请在冰豆网上搜索。
AndroidStudio移动应用开发任务教程微课版教案4
教学单元:
移动应用开发(9)
授课班级:
授课时间:
2
教学地点:
教学目的:
⏹应知:
1、了解SharedPreferences存储;
2、了解基本SQL语句的使用
⏹应会:
1、会使用SharedPreferences存放配置信息;
2、会使用基本SQL语句实现数据库的增删改查;
3、能完成简单Android程序的开发
教学重点、难点:
1.SharedPreferences的使用
2.SQL语句的使用
教学方法:
根据本堂课教学内容的重点与难点,教学过程中主要采用以下教学方法:
1.在理论教学上,主要在钉钉平台上进行,以讲授和教学演示为主,通过提问引导学生发现问题、分析问题,掌握Android软件开发的基本概念和流程。
2.在实践教学上,采用“实例引导,项目驱动”的方式讲授。
通过实现相关实例,在实例基础上改造拓宽,真正实现“学以致用”。
钉钉和QQ相结合,采用演示、实践和讨论相结合的模式。
3.注重教学整体过程设计,依托网络平台,将课前预习、课中讲授与演练和课后练习与讨论答疑有机结合,不断摸索提高教学效果。
教学过程设计:
备注:
1.课程设计
(1)回顾上次课的内容,提出在Android中如何存储数据的问题
(2)简单介绍Android本地存储的几种方式。
(3)以记住密码功能为例,讲解SharedPreferences的使用。
(4)首先,将QQDemoV2改名为QQDemoV3
(5)添加成员变量etQQName、etQQPwd和chkRememberPwd
(6)通过findViewById()方法获取布局文件中的相应控件
(7)实现当用户单击“登录”按钮时,如果勾选了“记住密码”选项,则首先将用户输入QQ号码和密码记录在SharedPreferences中,然后再跳转到“MainActivity”。
btnLogin.setOnClickListener(newView.OnClickListener(){
@Override
publicvoidonClick(Viewv){
if(chkRememberPwd.isChecked()){
SharedPreferencessettings=getSharedPreferences();"setting",MODE_PRIVATE);
SharedPreferences.Editoreditor=settings.edit();
editor.putString("qqnum",etQQName.getText().toString());
editor.putSting("pwd",etQQPwd.getText().toString());
mit();
}
Intentintent=newIntent(LoginActivity.this,MainActivity.class);
startActivity(intent);
}
});
(8)了解学生进度
(9)运行后,打开AndroidStudio菜单,单击“Tool-”→“Android”→“AndroidDeviceMonitor”命令,打开DDMS,切换到“FileExplore”,可以在相应的目录下找到“setting.xml”文件
注意,此时模拟器可能会因为权限问题,无法看到相应的信息,需要进行授权
DDMS中权限的处理(安装模拟器选用带GoogleApis选项的,不要带GooglePlay选项的)
进入cmd,切换到C:
\Users\adminn\AppData\Local\Android\sdk\platform-tools
运行adbroot
运行adbremount(大多数情况,已经可以看到相应目录了,如果不行则进行逐层授权)
获取root权限
运行adbshell
键入su
使用chmod777/data命令逐层授权
(10)在LoginActivity.java文件中,在onCreate()方法的末尾添加如下代码,实现当用户下次打开应用时,自动填入QQ号码和密码。
SharedPreferencessettings=getSharedPreferences("setting",MODE_PRIVATE);
etQQName.setText(settings.getString("qqnum",""));
etQQPwd.setText(settings.getString("pwd",""));
(11)了解学生进度
(12)回顾SQL基本语句
以系统的登录和联系人功能为例。
首先,我们需要实现系统登录,那么,我们需要有一张用户表----QQ_Login,这个表至少需要保存qq_num和qq_pwd,我们再看联系人界面,我们可以看到每个用户都有头像、名字、在线模式和签名,这些信息也需要保存,那么,是不是也应该添加在QQ_Login表中呢?
另外,我们发现我们在联系人界面中,将联系人按照所属国家的不同进行了分组,那我们如何标识一个联系人属于哪个国家呢?
----新建列belong_country。
(13)安装SQLiteExpert个人版,创建一个数据库TestDB,然后创建一张表QQ_Login,分别设置qq_num、qq_pwd、qq_name、qq_img、qq_online、qq_action和belong_country。
总结,如何创建一张表,如何定义列
切换到DDL页,查看相应的生成
CREATETABLE[QQ_Login](
[qq_num]VARCHARPRIMARYKEYNOTNULL,
[qq_name]VARCHAR,
[qq_pwd]VARCHAR,
[qq_img]INT,
[qq_online]VARCHAR,
[qq_action]VARCHAR,
[belong_country]VARCHAR);
切换到SQL页,练习insert语句,分别插入刘备、曹操、孙权和关羽
insertintoQQ_login(qq_num,qq_name,qq_pwd,qq_img,qq_online,qq_action,belong_country)
values('1001','刘备','123456',1001,'4G在线','天天向上','蜀')
练习select语句,查询所有数据,提问如果要实现登录,应如何查询
select*fromQQ_Loginwhereqq_num='1001'andqq_pwd='123456'
练习update语句,修改关羽所属国家,
updateQQ_Loginsetbelong_country='魏’
执行的结果是什么?
引出为什么要设置主键,主键的作用是做什么的
练习delete语句,删除一条关羽这条记录
(14)了解学生进度
(15)思考一下,如果我们要实现联系人功能,需要如何设计数据库。
也就是描述谁是谁的联系人,我们是在QQ_Login表中设计,还是需要另外建一张表?
如果是另外建,应该如何设计?
----观察联系人界面所需的信息,哪些是重复的信息?
能否去掉这些重复信息?
---表的主键是什么?
(16)结束本次课程,进入讨论答疑环节。
作业:
相关习题
教学单元:
移动应用开发(10)
授课班级:
授课时间:
2
教学地点:
教学目的:
⏹应知:
1、了解SQLite数据库;
2、了解如何使用程序访问SQLite数据库;
⏹应会:
4、会使用SQLiteOpenHelper创建和管理数据库;
5、能实现登录功能;
6、能完成简单Android程序的开发
教学重点、难点:
3.SQLiteOpenHelper的使用
4.实现登录功能
教学方法:
根据本堂课教学内容的重点与难点,教学过程中主要采用以下教学方法:
4.在理论教学上,主要在钉钉平台上进行,以讲授和教学演示为主,通过提问引导学生发现问题、分析问题,掌握Android软件开发的基本概念和流程。
5.在实践教学上,采用“实例引导,项目驱动”的方式讲授。
通过实现相关实例,在实例基础上改造拓宽,真正实现“学以致用”。
钉钉和QQ相结合,采用演示、实践和讨论相结合的模式。
6.注重教学整体过程设计,依托网络平台,将课前预习、课中讲授与演练和课后练习与讨论答疑有机结合,不断摸索提高教学效果。
教学过程设计:
备注:
1.课程设计
(1)回顾上次课的内容,提出在Android中如何访问SQLite数据库的问题。
(2)在Java中我们通常采用JDBC访问数据库,但因为JDBC会消耗较多的系统资源,所以Android采用专门的一些API来访问SQLite----SQLiteDatabase。
(3)一个SQLiteDatabase的实例就代表了一个SQLite的数据库,通过SQLiteDatabase实例的一些方法,我们可以执行SQL语句,对数据库进行增、删、查、改的操作。
主要是execSQL和rawQuery方法。
(4)但是,如何获得和管理SQLiteDatabase对象呢----SQLiteOpenHelper,简单介绍SQLiteOpenHelper。
(5)以登录功能为例,展示SQLiteOpenHelper的使用
(6)新建dbutils包,在该包下,新建类“MyDbHelper”,继承自SQLiteOpenHelper,并重写相关方法
构造器方法:
采用默认形式
这里,我们需要实现登录功能,主要使用QQ_Login表,所以我们需要在onCreate方法中创建一个数据表QQ_Login,并为其添加初始的数据
publicclassMyDbHelperextendsSQLiteOpenHelper{
publicMyDbHelper(Contextcontext,Stringname,
SQLiteDatabase.CursorFactoryfactory,intversion){
super(context,name,factory,version);
}
@Override
publicvoidonCreate(SQLiteDatabasedb){
Stringsql="CREATETABLE[QQ_Login]("+
"[qq_num]VARCHAR(20)PRIMARYKEYNOTNULL,"+
"[qq_name]VARCHARNOTNULL,"+
"[qq_pwd]VARCHARNOTNULL,[qq_img]INT,"+
"[qq_online]VARCHAR,[qq_action]VARCHAR,"+
"[belong_country]VARCHAR);";
db.execSQL(sql);
initData(db);
}
privatevoidinitData(SQLiteDatabasedb){
Stringcountries[]=newString[]{"蜀","魏","吴"};
Stringnums[][]=newString[][]{
{"1001","1002","1003","1004","1005","1006"},
{"2001","2002","2003"},{"3001","3002","3003"}};
Stringnames[][]=newString[][]{
{"刘备","关羽","张飞","赵云","黄忠","魏延"},
{"曹操","许褚","张辽"},{"孙权","鲁肃","吕蒙"}};
inticons[][]=newint[][]{
{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,R.drawable.lusu,R.drawable.lvmeng}
};
Stringsql="insertintoQQ_Login(qq_num,qq_name,qq_pwd,qq_img,
+"qq_online,qq_action,belong_country)"+
"values(?
?
?
?
?
?
?
)";
for(inti=0;ifor(intj=0;jdb.execSQL(sql,newObject[]{nums[i][j],names[i][j],
"123456",icons[i][j],"4G在线",
"天天向上",countries[i]});
}
}
@Override
publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){
}
}
(7)了解学生进度
(8)根据QQ_Login表的定义,修改“cn.edu.szpt.qqdemov3.beans”包中的QQContact类,添加两个成员变量,以及对应的getter和setter方法和构造器方法。
privateStringnum;
privateStringbelong_country;
(9)切换到LoginActivity.java中,修改onCreate()方法中,登录按钮的监听器处理代码,实现本地数据库验证功能。
首先采用拼接SQL语句的方式实现,演示SQL注入式攻击,然后强调必须使用参数形式,
btnLogin.setOnClickListener(newView.OnClickListener(){
@Override
publicvoidonClick(Viewv){
MyDbHelperhelper=newMyDbHelper(getApplicationContext(),
"QQ_DB",null,1);
SQLiteDatabasedb=helper.getReadableDatabase();
Stringsql="select*fromQQ_Loginwhereqq_num=?
andqq_pwd=?
";
Cursorcursor=db.rawQuery(sql,newString[]{
etQQName.getText().toString(),
etQQPwd.getText().toString()});
if(cursor.moveToNext()){
//登录成功,跳转到登录后界面
}else{
Toast.makeText(getApplicationContext(),"用户名或密码错误",
Toast.LENGTH_LONG).show();
}
}
});
(10)了解学生进度
(11)因为我们每次访问数据库都需要创建MyDbHelper对象,如果我们后面数据库名称和版本发生变化,我们需要修改的地方太多,所以,我们可以把这些信息放在一个常量里面。
(12)在dbutils包中,新建类“Db_Params”,以静态常量形式存放数据库的相关参数。
并修改相应的代码
publicclassDb_Params{
publicstaticfinalStringDB_NAME="QQ_DB";
publicstaticfinalintDB_VER=1;
}
(13)登录成功后,我们需要在界面上显示登录用户的头像,并显示与之相关的消息信息和联系人信息,因此,我们需要在多个类中使用当前登录的用户信息,为了方便使用,我们在MainActivity.java中,添加一个公有的静态变量loginedUser,用以存放登录用户的相关信息。
当登录成功后,跳转到MainActivity之前,添加如下语句,将登录用户的信息保存在loginedUser。
MainActivity.loginedUser=newQQContactBean(
cursor.getString(cursor.getColumnIndex("qq_num")),
cursor.getString(cursor.getColumnIndex("qq_name")),
cursor.getInt(cursor.getColumnIndex("qq_img")),
cursor.getString(cursor.getColumnIndex("qq_online")),
cursor.getString(cursor.getColumnIndex("qq_action")),
cursor.getString(cursor.getColumnIndex("belong_country")));
(14)当登录成功后,更新联系人界面上的登陆用户头像。
打开QQContactFragment.java文件,添加成员变量logined_img指向界面中的ImageView控件
privateImageViewlogined_img;
在onCreateView()方法中,通过findViewById()方法找到相应的控件,然后实现登录用户头像显示功能。
logined_img=(ImageView)view.findViewById(R.id.imgLoginIcon);
logined_img.setImageResource(MainActivity.loginedUser.getImg());
(15)结束本次课程,进入讨论答疑环节。
作业:
相关习题
教学单元:
移动应用开发(11)
授课班级:
授课时间:
6
教学地点:
教学目的:
⏹应知:
1、了解SQLite数据库的使用;
2、了解如何使用程序访问SQLite数据库;
⏹应会:
7、会使用DialogFragment创建对话框;
8、能实现联系人显示、添加和删除功能;
9、能完成简单Android程序的开发
教学重点、难点:
5.实现联系人显示、添加和删除
6.DialogFragment的使用
教学方法:
根据本堂课教学内容的重点与难点,教学过程中主要采用以下教学方法:
7.在理论教学上,主要在钉钉平台上进行,以讲授和教学演示为主,通过提问引导学生发现问题、分析问题,掌握Android软件开发的基本概念和流程。
8.在实践教学上,采用“实例引导,项目驱动”的方式讲授。
通过实现相关实例,在实例基础上改造拓宽,真正实现“学以致用”。
钉钉和QQ相结合,采用演示、实践和讨论相结合的模式。
9.注重教学整体过程设计,依托网络平台,将课前预习、课中讲授与演练和课后练习与讨论答疑有机结合,不断摸索提高教学效果。
教学过程设计:
备注:
1.课程设计
(1)回顾上次课的内容,提出本课的目标是实现联系人界面中的显示功能
(2)要实现联系人的管理,我们需要新建一张表QQ_Contact,用以记录每个用户的联系人关系,其中contactId为主键,自动增量;qq_num表示联系人的QQ号码;belong_qq表示联系人所属用户的QQ号码。
(3)这张表描述了每个用户有哪些联系人,但是我们观察一下联系人的界面,发现我们还需要每个联系人的信息,比如头像、姓名等。
那么这就涉及了表的连接,多表连接包括内连接、外连接、左外连接、右外连接。
SQLite只有内连接和左外连接,使用QQ_DB演示两种连接方式
(4)为了方便访问,我们再定义一个视图view_Contact,将QQ_Contact表左连接QQ_Login表,SQL语句如下:
SELECT
[u].[contactId],
[u].[belong_qq],
[v].*
FROM[QQ_Contact][u]
LEFTJOIN[QQ_Login][v]ON[u].[qq_num]=[v].[qq_num]
(5)了解学生进度
(6)这里,我们需要更新数据库QQ_DB,但是,onCreate方法只是在第一次创建数据库才会调用,因此,这里我们需要删除已创建的数据库,操作如下:
打开AndroidDeviceMonitor窗口。
找到data/data/…qqdemov3/databases/目录,删除QQ_DB和QQ_DB-journal两个文件。
(7)打开QQDemoV3工程中“cn.edu.szpt.qqdemov3.dbutils”包下的MyDbHelper.java文件,修改onCreate()方法,在initData(db)方法调用前添加如下代码。
//创建QQ_Contact表
sql="CREATETABLE[QQ_Contact]("+
"[contactId]INTEGERPRIMARYKEYAUTOINCREMENTNOTNULL,"
+"[qq_num]VARCHARNOTNULL,[belong_qq]VARCHARNOTNULL);";
db.execSQL(sql);
//创建view_Contact视图
sql="CREATEVIEW[view_Contact]AS"+
"SELECT[u].[contactId],[u].[belong_qq],[v].*FROM[QQ_Contact][u]"
+"LEFTJOIN[QQ_Login][v]ON[u].[qq_num]=[v].[qq_num];";
db.execSQL(sql);
(8)了解学生进度
(9)修改MyDbHelper类中的initData()方法用来初始化数据。
privatevoidinitData(SQLiteDatabasedb){
//。
。
。
省略相关数组的定义,和初始化。
此部分不变
Stringsql="insertintoQQ_Login(qq_num,qq_name,qq_pwd,qq_img,"+
"qq_online,qq_action,belong_country)values(?
?
?
?
?
?
?
)";
for(inti=0;ifor(intj=0;j