本文讲述了如何应用大三下学期智能移动终端开发技术课程所学知识,完成包含服务器端、客户端程序的应用——博学谷登录模块的开发,结合java语言基本知识,例如:字符串、列表、类、数据库读写等,设计、实现一个以java语言为基础的博学谷的登录模块。该模块能够实现远程网络验证登录的基本功能,涉及到所用java库的主要类。

  鉴于之前版本的博学谷使用的是Android平台上一个轻量级的存储类SharedPreference实现数据存储,虽然容易理解和使用,但是无法实现和服务端和数据库的数据交互,体现出只能本地使用的局限性。所以本综合实验采用当前主流的处理网络请求的OKhttp3开源框架,实现远程网络数据的传送和获取,从而完成博学谷登录模块功能的设计与实现。

  除了实现登录、立即注册和找回密码的通过网络请求操作数据库这三个功能外,我们在用户登录和退出时,分别发送一个网络请求,传送登陆者的用户名和本地参数,本地参数例如有本机IP,登录设备号等等。本次实验只是完成了上传用户名,本地参数尚未添加。服务端接收到请求后,获得登陆者的用户名,获取服务器系统时间,将该名用户的登录和退出的时间登记在数据库中。

  另外在点击主界面的记录按钮时,可以跳转到另一个界面,发送一个网络请求,服务器接收到以后,查询数据库服务器,返回给客户端一个json串,用于展示用户的登录记录。

服务器端

  首先在NetBeans中打开服务器端程序,添加所需jar包(gson,mysql),GlassFish服务器;

  然后打开Navicat,连接到wlw1db数据库,建立一张自己的表,再添加所要访问的用户信息,记得添加主键;

  然后再修改服务器程序中连接数据库的常用类——DBUtil中的连接方法getConn()中的连接参数,确保数据库服务器连接成功。

  最后运行serverlet中的ListAllUserServlet可以在浏览器中看到所有用户的username和password的json串。

手机端:

  首先模拟运行之前的Android程序,通过okhttp实现访问具有特定url的服务器,访问成功可在LogCat中看到服务器端到数据服务器中取出的所有用户信息的json串。

  然后通过创建一个子线程,完成网络数据读取后,将完成信号发送给Handler,Handler再对主线程程UI界面进行更新操作,即可在手机端界面完成网络数据的读取。

  需要注意的是在手机端运行的程序访问的url必须是服务器端地址,如果是localhost则是手机的IP地址。

Java和android的基本概念、高级特性

Java接口

  定义一种对象的方法的规范、标准,然后通过另一个具体的实现类来实现这些规范。以服务器端UserDao为例,先定义接口UserDao,然后实现接口UserDaoImpl。类似的还有service。

Android的Handler消息机制

  当应用程序启动时,Android首先会开启一个UI线程,负责管理界面控件和进行事件分发。但是如果这个事件是耗时的,比如是网络读取数据,会出现假死甚至强制关闭。应该想到的是用子线程去处理耗时事件,但是子线程又不能直接操作主线程。所以就用到了Android中的一种异步回调机制Handler。

  Handler负责和子线程的通信,当子线程完成工作后,会通知Handler,然后对主线程UI进行操作。

模块分析:登录界面

  登录界面主要分为注册,登录,忘记密码三个模块,应该还要有登录验证模块,比如输入验证码。

  

  登录界面主要是实现通过获取控件中输入的内容对数据库进行操作,即增、删、改、查。

  登录的时候应该是手机端与服务器进行网络交互:用户点击登录的时候,首先进行本地检查,输入是否完整,然后按照网络获取数据方式的回路,先封装成bean,然后转成json格式,通过OKhttp提交到服务器,服务器解析json串和数据库服务器中的信息进行比对,最后返回给手机端登录成功与否的结果。

  注册是对数据库进行查操作,看是否已存在用户,然后在数据库中增加记录。

  

  找回密码就是对数据库进行改操作,方式和前面的大同小异,不同的是操作数据库的select语句不一样。

  

  退出登录时序图

  

网络访问部分

  博学谷中网络访问部分实现的功能是通过http获取特定url的数据并展示。网络获取数据代码注释如下图所示。

  获取信息后Handler处理部分代码注释如下:

  本次综合实验课程设计,我们主要运用了OKhttp这个网络请求处理的开源框架,实现了本地客户端和服务端之间的网络通信,进而实现了Android客户端远程操作Mysql数据库,最终实现博学谷软件登录模块的基本功能。我们不仅对Java语言开发智能移动终端有了更深刻的了解,还对面向对象编程思想有了更深层次的理解,特别是学习了Android编程的基本知识,构建从Android客户端到服务器再到数据库,甚至联系到我们之前学习的单片机、嵌入式的系统而完整的知识体系。

  最后如果有需要的小伙伴可以自行在这个网盘链接中下载,提取码obcy。如果有用不要忘记点个赞,让更多的人看到哦。

Android课程设计——博学谷1.0的更多相关文章

  1. Android课程设计第六天欢迎界面(跳转)

    注意:课程设计只为完成任务,不做细节描述~ package com.example.myapplication; import android.app.Activity; import android ...

  2. Android课程设计第五天欢迎界面(滑动)和图形选择

    注意:课程设计只为完成任务,不做细节描述~ 滑动界面 package com.example.myapplication; import android.content.Intent; import ...

  3. Android课程设计第四天ListView运用

    注意:课程设计只为完成任务,不做细节描述~ 效果图 <?xml version="1.0" encoding="utf-8"?> <Relat ...

  4. Android课程设计第三天帧动画区间动画

    注意:课程设计只为完成任务,不做细节描述~ 点火是帧动画,发射是区间动画,于是 <?xml version="1.0" encoding="utf-8"? ...

  5. Android课程设计第二天界面排版

    注意:课程设计只为完成任务,不做细节描述~ 老师叫我们做一个这个样子,然后.. <?xml version="1.0" encoding="utf-8"? ...

  6. Android课程设计第一天Android Studio安装

    注意:课程设计只为完成任务,不做细节描述~ 学校有一个Android的课设,所以顺便把Android Studio安装了上去. 实际上安装过程并不复杂,只有几个地方需要注意~ 安装包可以去http:/ ...

  7. java课程设计全程实录——第0天

    本次课设计划在5月25日完成.目前还剩18天. 第0天主要完成事项如下: 搭建开发环境 制定开发进度规划表 阅读前人的课设 详细: 1.IDE的下载,安装,以及配合使用的阿里巴巴编程规约插件的安装与测 ...

  8. 20155338课程设计个人报告——基于ARM实验箱的Android交友软件的设计与实现

    课程设计个人报告--基于ARM实验箱的Android交友软件的设计与实现 个人贡献 实验环境的搭建 代码调试 在电脑上成功运行 研究程序代码撰写小组报告 一.实验环境 1.Eclipse软件开发环境: ...

  9. 一培训机构设计的学习android课程内容:供大家参考

    转自:http://www.cnblogs.com/csj007523/archive/2011/06/16/2082682.html 一培训机构设计的学习android课程内容:供大家参考 第一阶段 ...

随机推荐

  1. python返回值进行unpack

    最近在写yolov3,因为yolov3的多输出性质,所以我打算写适配多输出的工具函数,在numpy中可以在一个array中包含多个不同维度的array,但在tensorflow中一个tensor只能保 ...

  2. Python Mock 的入门

    Mock是什么 Mock这个词在英语中有模拟的这个意思,因此我们可以猜测出这个库的主要功能是模拟一些东西.准确的说,Mock是Python中一个用于支持单元测试的库,它的主要功能是使用mock对象替代 ...

  3. 谈谈Vue的递归组件

    2月最后一天,而且还四年一遇,然而本月居然一篇博客没写,有点说不过去.所以,今天就来谈谈Vue的递归组件.我们先来看一个例子: See the Pen 递归组件 by imgss (@imgss) o ...

  4. python中if __name__ == '__main__'是什么?

    __name__和__main__认识 作用:一般用于测试程序的功能,if __name__ == '__main__':下面的代码会被执行,但当前.py文件被当做模块导入的时候,main下面的代码就 ...

  5. ORACLE数据库实现主键自增

    ORACLE数据库是甲骨文公司的一款关系数据库管理系统. 实现主键自动增长需要四个步骤: 去看 创建表格 去看 创建自增序列 去看 创建触发器 去看 插入测试 1.创建表格(必须有主键) -- 创建学 ...

  6. opencv +数字识别

    现在很多场景需要使用的数字识别,比如银行卡识别,以及车牌识别等,在AI领域有很多图像识别算法,大多是居于opencv 或者谷歌开源的tesseract 识别. 由于公司业务需要,需要开发一个客户端程序 ...

  7. Java面试必问之Hashmap底层实现原理(JDK1.8)

    1. 前言 上一篇从源码方面了解了JDK1.7中Hashmap的实现原理,可以看到其源码相对还是比较简单的.本篇笔者和大家一起学习下JDK1.8下Hashmap的实现.JDK1.8中对Hashmap做 ...

  8. py基础之有序列表

    L =['adam',95.5,'lisa',85,'bart','bart',59]print (L)#list是一种有序的列表,可以使用索引访问每个list中的值print (L[1])#list ...

  9. CSS 实现元素较宽不能被完全展示时将其隐藏

    首发于本人的博客 varnull.cn 遇到一个需求,需要实现的样式是固定宽度的容器里一排显示若干个标签,数量不定,每个标签的长度也不定.当到了某个标签不能被完全展示下时则不显示.大致效果如下,标签只 ...

  10. 适配iphoneX

    tips iphone6设备宽高为375×667,屏幕分辨率为750×1334,故其设备像素比(dpr)为2.iphoneX的设备宽高375*812,屏幕分辨率为1125x2436,故dpr=3 适配 ...