20155334课程设计个人报告——基于ARM实验箱的Android交友软件的设计与实现(二)

20155334课程设计个人报告——基于ARM实验箱的Android交友软件的设计与实现(二)

为了更好地理解本次课设,补充了这篇博客。

搭建环境本来是做了的,只是在检查前的调试过程中电脑突然黑屏,并且无法启动。后来又从同学处借来一部电脑,并在当天晚上又配置了一遍。

这篇博客主要从代码角度分析基于ARM实验箱的Android交友软件的设计与实现:

代码分为两大块,即服务器部分和客户端部分:

服务器端:

1. 服务器框架分析:

服务器由Java语言开发,主要作用是处理客户端的请求,通过解析客服端的指令来操作数据库。主要使用Socket接收客户端的数据,JDBC来操作数据库等。
服务器管理员点击启动,启动线程 ServerThread 来监听本机端口有没有网络连接,当监听到有连接时返回Socket对象,然后启动 ServerAgent 线程来解析客户端的数据。同时向 DataInputStream 数据输入流读取网络上客户端的请求,解析请求的内容,分别调用DBUtil中的静态方法来访问、操作数据库并将结果返回。然后将结果通过 DataOutputStream 数据输出流返回给网络客户端,

2. 服务器类功能介绍:

功能
Chat类 封装了对话的编号、对话双方的ID和聊天的内容
Comments类 封装了评论时间、内容、名称、评论者ID
Configuration类 访问配置文件database.properties,来连接Mysql数据库
ConstantUtil类 封装了程序定义的静态常量
Date类 封装了约会的相关信息
DBUtil类 数据库工具类,提供一系列的静态方法实现对数据库的操作
HeadInfo类 封装了头像的相关信息
Server类 程序的主类,显示服务器的前端界面
ServerThread类 处理端口的连接,来实现多台客户端登录
ServerAgent类 读取网络数据输入源,并解析数据后操作数据库,最后将访问、操作数据库的结果返回给网络数据输出源
User类 封装用户信息

3. 服务器数据库相关代码分析

配置文件database.properties:

database.driver=com.mysql.jdbc.Driver      //驱动程序名
database.url=jdbc:mysql://localhost:3306/date?useUnicode=true&characterEncoding=utf-8   //URL指向要访问的数据库名
database.username=root                               //数据库的用户名
database.password=passwd                        //数据库的密码

此配置文件主要是为了数据库这个操作数据的模块具有通用性,将这些参数比如访问的数据库名称、数据库的用户名以及数据库的密码进行统一配置,以免写死在程序里,导致以后需要修改这些参数时产生不便。

  1. 在DBUtil.java中创建一个Configuration对象,拿到配置文件database.properties中的内容。如下代码:
Configuration rc = new Configuration("database.properties"); 
driver = rc.getValue("database.driver");
url = rc.getValue("database.url");
userName = rc.getValue("database.username");
passwd = rc.getValue("database.password");
  1. 在DBUtil.java中,使用JDBC直接访问数据库,返回Connection对象。如下代码:
Class.forName(driver);   //加载驱动程序		   
con=DriverManager.getConnection(url,userName,passwd);  //连接数据库
  1. 在DBUtil.java中,使用Statement来执行SQL语句。如下代码:
Statement st = con.createStatement();	//创建一个Statement对象

服务器总要连接到网络吧,最后一部分就是

4. 服务器网络相关代码分析:

Java类库中Socket类能方便的实现客户端和服务器的连接。它唯一的确定了远端主机上ip地址和端口号的组合。

服务器端通过监听某个端口是否有连接请求,同时客户端向服务器端发连接请求,服务器端向客户端返回接受消息,来建立连接。

主要过程包括:创建,连接,读写,关闭。

  1. 在Server.java中创建ServerSocket监听客户请求。
ss = new ServerSocket(Integer.parseInt(port.getText().trim()));
st = new ServerThread(ss);
st.start();	
  1. 在ServerThread.java中阻塞的等待客户端的请求,建立连接后返回Socket对象。
Socket socket = ss.accept();
  1. 在ServerAgent.java中 ,由Socket对象创建输入流、输出流对象。
this.din = new DataInputStream(socket.getInputStream());
this.dout = new DataOutputStream(socket.getOutputStream());
  1. 在ServerAgent.java中,线程执行方法run()中,读、写输入输出流。
String msg = din.readUTF();    //对msg的解析,访问数据库。然后将结果写如输出流中。
dout.writeUTF(loginInfo);

5)在ServerAgent.java中,关闭输入、输出流,关闭Socket。

this.din.close();
this.dout.close();
this.socket.close();

客户端:

1. 客户端框架分析:

客户端由Android语言开发。程序中的Activity之间的跳转,实现了界面的切换。

首先,每一个Activity是实现一个特定的功能。其次是各个Activity之间的跳转。最后,每一个Activity是怎么实现其具体功能的。

首先启动软件,在进入 LoginActivity显示前启动显示欢迎界面,结束欢迎界面,然后显示登陆界面。

在登陆界面中当用户点击登陆时,首先建立网络连接并返回网络 Socket 对象。确定连接后,判断用户名和密码是否成功登陆,当网络返回登陆失败的时候,提示错误。否则启动 MainActivity 进入个人中心。

在个人中心所对应的中,总共有5种 Activity 可以被启动。分别是个人信息修改,密码修改,发布约会,附近好友,查看约会。

以个人信息修改为例介绍实现功能跳转的过程:

  1. 在个人中心中,点击修改个人信息进入个人信息修改界面。
  2. 当点击修改按钮时,首先建立网络连接,提交修改的内容并接受服务器端结果。
  3. 当返回成功时,再次建立网络连接。将已经修改于数据库中用户个人信息读取出,并显示在个人信息修改界面的条目中。

关于聊天功能,当点击附近好友界面和查看约会界面中的条目时,将跳转到在线聊天界面中。

聊天的内容通过访问数据库中的聊天列表获得,然后显示在聊天界面中。

2. 客户端类功能介绍:

功能
WelcomeDateActivity类 调用其来实现欢迎界面
ChatActivity类 用来实现聊天的功能的类
ConstantUtil类 系统默认的常量,包括固定的服务器ip地址和固定的端口号
ContactsActivity类 实现显示附近好友功能,包括好友的姓名,性别,头像
DateListActivity类 显示已经发布的约会信息,包括约会类型
LoginActivity类 实现登录功能
Main类 版权声明
MainActivity类 实现个人中心界面功能
ModifyActivity类 实现用户修改个人信息
MyConnecter类 建立网络连接类。创建网络输入、输出流
PubDateActivity类 实现发布约会界面功能
PwdModifyActivity类 实现在线修改登陆密码
RegActivity类 实现在线注册功能

3. 界面的跳转 intent 介绍:

各个界面的跳转需要用到有个重要的“媒介”,就是 Intent ,Intent主要是解决Android应用的各项组件之间的通讯。

因此,Intent起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。

比如在本次的课设中,有如下的实例:

  1. 实现了个人中心活动向附近好友活动的跳转。
Intent intent = new Intent(MainActivity.this,ContactsActivity.class);
intent.putExtra("uno", uno);    //传递键值对
startActivity(intent);		   //启动intent对象
  1. 实现了个人中心活动向个人信息修改活动的跳转。
Intent intent = new Intent(MainActivity.this,ModifyActivity.class);
intent.putExtra("uno", uno);
startActivity(intent);
  1. 实现了个人中心活动向密码修改活动的跳转。
Intent intent = new Intent(MainActivity.this,PwdModifyActivity.class);
intent.putExtra("uno", uno);
startActivity(intent);
  1. 实现了个人中心活动向发布约会信息活动的跳转。
Intent intent = new Intent(MainActivity.this,PubDateActivity.class);
intent.putExtra("uno", uno);
startActivity(intent);
  1. 实现了个人中心活动向发布约会信息活动的跳转。
Intent intent = new Intent(MainActivity.this,DateListActivity.class);
intent.putExtra("uno", uno);
startActivity(intent);

总结以及感想:

经过这几周的课程设计,让我意识到了环境的搭建固然重要,然而要想更加的理解其中的深层次的缘由,则需要对代码的熟悉和掌握。

课程设计是一个全面的考核,在它之下,暴露出了我自身的许多问题,比如对Android开发的不熟悉,对于代码的理解不到位,当然最最重要的一点是对待课设的态度。

在课设中能得到的东西是之前的学习中能以得到的,那就是自己亲自动手实践的机会。

上次的检查给了我当头棒喝,要想蒙混过关是根本不可能的,只有亲身去理解,亲自动手去做,才能将课程设计的作用发挥出来。

最后我想得到老师的原谅,因为到了最后的时刻,还是由于自身水平太差,无法实现老师的要求,但是经过这两天的琢磨还是有巨大的收获的。

我相信,有了努力就会有回报的,从长远来看,这些经历都将使我受益匪浅。

请老师指正,谢谢老师。

posted @ 2018-06-10 23:50  T_T>_<20155334  阅读(120)  评论(0)    收藏  举报