前言
做毕业设计涉及到安卓开发, 决定好好学习安卓开发. 在正式做毕业设计之前, 有必要先设计和完成一个与毕业设计最终成果相关的 demo 或者说样例 App. 最终毕业设计需要实现的功能包括通过调用 PHP 端 API 实现 JSON 获取和解析, 等功能. 而快递查询 App 恰好具有我最终实现功能大部分的前置效果, 故选取制作一个快递查询 App 来练手
关键词
安卓开发, JSON ,API ,HTTP, 毕业设计
历程记录
平台和工具 (开发, 调试, 运行)
本案例使用的开发工具为 AndroidStudio3.4, 在开发向导内选择从安卓 4.0 之后开始兼容. 调试和运行的平台是创建的虚拟设备 pixel2 API24, 使用的是基于 X86 的运行环境. 项目选择 "empty project" 模板. 其他没什么需要设置的了.
目录结构
除了创建新空项目产生的默认文件 (如果你也在做, 为了确保我未改动部分和你一样, 请务必确保选择的 Androidstudio 版本和我的一致, 并且最小兼容的版本之类的也和我一致. 调试和运行环境与这个生成无关), 本人参与改动或新增的文件见 fig2. 其中, 绿色表示新建文件, 红色表示修改文件, 蓝色表示未动的文件 / 目录 (如果是目录, 则单纯指名字未动, 总之你肯定是看得懂的). 如果你的显示目录情况和我的不一样, 请将 fig1 红色箭头指向的选项改动到 project
Fig1. 目录显示选项
Fig2. 项目目录结构
编辑思路
(1) 布局
安卓界面的布局通过撰写 xml 格式布局文件完成.
我们首先要明白在这个工程中, xml 文件的脉络. 那么在我设计这个的这个简易快递查询中, 只有一个界面, 这个界面总体是从上到下布局, 其中中间要有一层内再左右布局两块. 从上到下第一个模块是标题, 第三个模块是按钮, 第四个模块是快递物流信息展示, 第二个模块用于承载在这个里面从左到右的两个模块, 一个是快递单号输入框, 一个是快递公司选择框.
一般说来在进行产品设计的时候, 我们都需要画一个草图. 市面上有很多的成熟草图和粗产品设计软件, 但是我也不会用, 我也懒得问. 对于这种简易的工程, 我们可大可小. 在这种单界面, 流程简单, 以学习安卓基本框架为主的开发流程内, 我们用画图软件画一下布局就可以了.
那么, 我们在明白了在这样的一个 App 内需要放入什么样的内容, 就可以看懂我撰写的布局文件 activity_main.xml.
其和其他几个你在之前所看到的目录改动的 xml 文件相互关系如图:
其中, activity_main.xml 为主布局文件, 但是设计的系统内, 文本编辑框内不是空空如也, 也有背景颜色 (为了美观), 在从上到下的第三部分内需要承载物流信息, 本身需要被定位. 所以, 单纯的一个主布局文件无法满足需求. 为了更好的在后期明白逻辑关系, 方便修改, 所以我们分离出 edit_bg.xml 和 item_list.xml 两个文件, 并链接到 activity_main.xml 的对应位置.
具体我们在编辑的文件中给大家展示一下:
(2) 逻辑
该 App 的功能实现, 我们首先要明白一个快递查询流程是什么样子的. 那么在我的这个查询 App 内, 是需要客户手动输入快递单号, 并选择快递公司, 才能进行查询的. 信息查询返回的结果是依靠快递 100(网上瞎搜得到的一个免费 API) 的 API 实现. 当然, 很明显如果能够扫码识别或者是根据快递单号自动识别快递公司都是再好不过的. 不过这并不影响核心功能, 不影响我们对于功能的抽象. 而且, 我们设计出来的功能, 只需要保证后续扩展性良好即可.
使用流程大致是: 用户输入完快递号码, 选择完快递公司, 点击查询, App 向 API 发送请求, 返回结果, 解析结果, 展示结果.
那么我们再用一个图片来展示一下:
这时候, 我们已经明白了这个程序用户交互的一个基本逻辑, 那么我们围绕这个基本逻辑, 配合安卓开发的相关技巧, 实现功能就不是难题啦!
功能实现涉及的额外技术
现在, 我们已经明白了这个 App 的基本页面布局, 完成了草图样的界面布局设计, 并且明确了交互逻辑, 了解了大致的交互流程. 那么在上一节文末, 我说在配合安卓开发的相关技巧, 这个程序就可以轻松做出. 但其实这个相关技巧的范围太过宽泛了, 那么我现在假定大家已经明白了安卓的权限控制, 布局文件结构和基本 java 语法, 以及 java 内程序数据如何与界面数据相关联. 这里简要介绍两个与具体业务相关的处理技能.
一个是 HTTP 请求发送, 一个是 JSON 数据解析. 那么有基础知识的人应该明白, 明白了 HTTP 的请求方法, 我们就可以调用 API. 明白了 JSON 数据解析的手段, 我们才可以将返回的原始数据变为程序展示需要的数据, 最终变成大家都能看懂, 直观的最终展示结果.
(1) 安卓内的 HTTP 请求方法
安卓内 HTTP 请求等同 JAVA 下的 HTTP 请求方法.
关于 JAVA 下 HTTP 的请求方法, 这里直接贴出一篇文章: https://www.cnblogs.com/hhhshct/p/8523697.html
在本 App 中, 我们又是如何使用 HTTP 请求方法实现的 API 调用呢?
在本程序中, 我们通过撰写 sendRequest() 来实现对按钮点击事件的响应. 由于在本 App 中唯一的按钮, 目的就是为了把之前输入和调整好的数据打包送出, 发起对快递 100 API 的调用, 所以相当于这个按钮点击的主要作用就是实现 HTTP 请求调用.
我们来看一下这个函数的源码:
在这个 App 中, 我们采取 apache 封装好的 httpclient 方法来进行 http 请求. 具体核心语句的解释可以看图.
(2) 安卓内的 JSON 解析方法, 以及展示的代码撰写
安卓内 JSON 解析方法等同 JAVA 下的 HTTP 请求方法.
这边也贴出一个介绍 java JSON 解析相关的博客地址: https://www.cnblogs.com/boy1025/p/4551593.html
那么既然我们需要解析数据, 我们就要看看通过这个 API 发送请求, 到底会得到什 么样的数据.
我们可以看到, 这个 API 里面有两个参数, 一个是快递公司的拼音 (查对应的公司代码), 还有一个就是快递单号. 我们随便选择一家快递公司, 输入一个错误的快递单号, 看到结果如图.
我们需要展示的内容就是 data 后面 JSON 数组内的每一个小过程.
这里贴出对应的函数源代码来:
其实这个函数做的内容就是把之前 httpRequest() 得到的数据, 处理后填到 listView 内.
全流程说明
很荣幸, 到这里, 我的这个小项目的设计规划, 基本草图, 布局安排, 程序逻辑安排和程序中可能的难点都介绍 OK 了. 当然还有一些细枝末节的东西, 我相信如果你想复刻我这个项目, 有了上面的纲领性文件, 解决那些小问题都 so easy!
我们再用一个图的形式, 看一下这个 App 一个具体的处理流程吧!
程序源码
这里直接贴出程序源码的下载地址, 本人已经上传到 CSDN.
来源: http://www.bubuko.com/infodetail-3059312.html