项目4任务7-APP的用户登录功能_第1页
项目4任务7-APP的用户登录功能_第2页
项目4任务7-APP的用户登录功能_第3页
项目4任务7-APP的用户登录功能_第4页
项目4任务7-APP的用户登录功能_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2相关知识34任务小结与练习1任务实施任务引入与目标APP的用户登录功能一、任务引入与目标任务引入任务6实现了APP的用户注册功能,接下来是APP的用户登录功能。用户能否注册成功的关键是提交的用户名和数据表中的用户名是否匹配。那么用户能否登录成功的关键又是匹配什么呢?很显然,既要用户名匹配,也要密码匹配,具体在Node-RED中通过流程实现判断。任务目标任务7将实现以下目标:在APP中点击btn11按钮时,弹出自定义对话框;在对话框中输入要登录的用户名和密码,通过HTTP客户端向Web服务器发送POST方式的请求;Web服务器接收到请求后,查询用户表中是否已存在用户名以及密码是否相符,并发回response;如果用户名和密码均匹配,则发回登录成功的response;APP的HTTP客户端收到HTTPresponse后,根据response的内容,决定是否跳转到APP第二页,或者Toast提示信息。二、相关知识Android工程中变量的作用域在Android工程中,变量的作用域是指变量在程序中可以被访问的范围。变量的作用域由它在代码中声明的位置和使用的修饰符等决定。以下是一些常见的变量作用域:(1)局部变量是在方法内部或代码块中定义的变量,只能在该方法或代码块中使用。局部变量可以根据需要进行初始化,包括基本数据类型和对象引用类型。(2)成员变量是在类中定义的变量,可以被类中的所有方法和代码块访问。成员变量分为实例变量和静态变量两种类型。实例变量只有在创建类的实例后才能访问,而静态变量可以在类被加载时就被访问。(3)参数变量是作为方法的参数传递进来的变量,可以在方法内部使用。参数变量的作用域与局部变量相同,只能在方法内部访问。需要注意的是,变量的作用域和生命周期不同,变量作用域结束并不意味着它的生命周期也结束。例如,一个对象引用类型的变量,在方法结束后其作用域结束,但是其引用的对象可能仍然存在于内存中,直到垃圾回收器将其清除。二、相关知识Android中的Toast在Android开发中,Toast是一个简单的提示框架,用于在屏幕上显示短暂的消息。Toast可以用于提示用户某个操作已成功完成、某个错误已发生或其他一些需要向用户展示信息的场景。以下是使用Toast的一般步骤:调用静态方法makeText()来创建Toast对象,并传入Context、提示文本和Toast显示时间等参数;调用show()方法将Toast显示在屏幕上;当Toast显示时间结束后,Toast会自动消失。例如,下面的代码演示了如何在Android应用程序中使用Toast://定义一个Context变量Contextcontext=getApplicationContext();//创建和显示ToastCharSequencetext="HelloToast!";intduration=Toast.LENGTH_SHORT;Toasttoast=Toast.makeText(context,text,duration);toast.show();在这个例子中,我们首先获取了一个ApplicationContext对象;然后创建了一个Toast对象,并设置Toast提示文本为“HelloToast!”,Toast显示时间为SHORT(即2秒钟);最后,调用show()方法,在屏幕上显示Toast。三、任务实施实施设备部署了AndroidStudio、MySQL、Node-RED开发环境的计算机。实施过程1.APP设计(1)btn11按钮的单击事件监听。btn11按钮在第一个页面的布局如图4-111所示。图4-111btn11的布局三、任务实施在第一个页面的活动文件MainActivity.java中编写btn11按钮的事件监听方法,如图4-112所示。项目2的任务6实现过btn11的单击功能,单击btn11后APP直接跳转到page2。本任务需要完善btn11的单击功能,实现点击btn11后访问数据库,用户名和密码验证无误后APP跳转到page2。另外,登录功能的很多代码与注册功能类似,可以拷贝后修改。图4-112btn11按钮的事件监听三、任务实施对话框代码:程序的功能:点击btn11后,会跳出2个输入框和1个“确定”按钮;取出输入框的内容赋值给变量userNameLog和passWordLog;点击“确定”按钮后,将userNameLog和passWordLog作为参数,以post的方式提交HTTP请求到Node-RED中的HTTP服务端。binding1.btn11.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewview){//容器layout:线性布局,包括2个输入框LinearLayoutlayout=newLinearLayout(MainActivity.this);layout.setOrientation(LinearLayout.VERTICAL);finalEditTextet3=newEditText(MainActivity.this);et3.setText("用户名:");layout.addView(et3);finalEditTextet4=newEditText(MainActivity.this);et4.setText("密码:");layout.addView(et4);//对话框:由Title、2个输入框、确定按钮、取消按钮组成AlertDialogalertDialog=newAlertDialog.Builder(MainActivity.this).setTitle("请输入用户名和密码")//标题.setView(layout)//输入框et3和et4.setPositiveButton("确定",newDialogInterface.OnClickListener(){@OverridepublicvoidonClick(DialogInterfacedialogInterface,inti){userNameLog=et3.getText().toString();passWordLog=et4.getText().toString();}}).setNegativeButton("取消",null).show();}});三、任务实施(3)提交HTTP请求与接收响应。添加OkHttp框架,配置网络权限,创建OkHttp对象等,在之前的项目中已经完成。现在已经有一个名为okHttpClient的HTTP请求客户端。编写一个异步请求函数,放在对话框“确定”按钮中执行。所谓异步请求,就是把请求加入enqueue(队列)中,等待执行。下面将在异步请求函数中使用POST方法。privatevoidLogPost_es(){//创建表单FormBodyformBody=newFormBody.Builder().add("username",userNameLog).add("password",passWordLog).build();//表单数据放在request中,通过post方法提交Requestrequest=newRequest.Builder().url("11:1880/APP_login").post(formBody).build();okHttpClient.newCall(request).enqueue(newCallback(){@OverridepublicvoidonFailure(@NonNullCallcall,@NonNullIOExceptione){e.printStackTrace();}@OverridepublicvoidonResponse(@NonNullCallcall,@NonNullResponseresponse)throwsIOException{//获取响应的数据部分Stringresult=response.body().string();//根据response,跳转在主线程中Toast出来runOnUiThread(newRunnable(){@Overridepublicvoidrun(){if(result.equals("SuccessLogin")){Intentintent=newIntent();//由MainActivity转向SecondActivityintent.setClass(MainActivity.this,SecondActivity.class);startActivity(intent);//按照意图,启动Activity跳转}elseif(result.equals("UsernameorPasswordError")){三、任务实施如果没有收到response,则打印异常消息;如果收到response,则根据情况,跳转至下一页或者提示登录失败。另外,调用LogPost_es函数,如图4-113所示。至此,APP设计就完成了。图4-113调用LogPost_es函数Toast.makeText(MainActivity.this,"用户名或密码错误,请重新登录!",Toast.LENGTH_SHORT).show();}else{Toast.makeText(MainActivity.this,"未知错误!",Toast.LENGTH_SHORT).show();}}});}});}三、任务实施2.Node-RED设计如图4-114所示,登录的流程比注册的流程要简单,只需要根据用户名查询数据表是否有记录,然后判断记录中的密码是否相符:如果相符,回复“SuccessLogin”;如果是其他情况,可能是没有记录(用户名不对),或者密码不对,统一回复“UsernameorPasswordError”。图4-114登录的流程图4-115编辑httpin节点APP登录的http端点配置,如图4-115所示。三、任务实施获取用户名和密码节点配置,如图4-116所示。编辑SQL查询用户名节点,如图4-117所示。进行mysql节点配置,如图4-118所示。图4-116编辑function节点图4-118编辑mysql节点图4-117编辑SQL查询用户名节点三、任务实施判断密码是否错误节点配置如图4-119所示。这一步其实就是判断:根据表单提交的用户名查询的数据表中的密码和表单提交的密码是否一致。SuccessLogin回复节点配置如图4-120所示。用户名或密码错误回复节点配置如图4-121所示。2个httpresponse按默认设置即可。图4-119编辑switch节点图4-121用户名或密码错误回复节点图4-120SuccessLogin回复节点三、任务实施3.结果测试部署流程,MySQL也要启动才行。根据APP提交的用户名、密码情况,用户可能登录成功,也可能登录失败。(1)登录成功的情况。如果输入正确的用户名和密码,跳转到第2页

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论