前言

做毕业设计涉及到安卓开发,决定好好学习安卓开发。在正式做毕业设计之前,有必要先设计和完成一个与毕业设计最终成果相关的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下的JSON解析方法。

这边也贴出一个介绍java json解析相关的博客地址:https://www.cnblogs.com/boy1025/p/4551593.html

那么既然我们需要解析数据,我们就要看看通过这个api发送请求,到底会得到什         么样的数据。

我们可以看到,这个API里面有两个参数,一个是快递公司的拼音(查对应的公司代码),还有一个就是快递单号。我们随便选择一家快递公司,输入一个错误的快递单号,看到结果如图。

我们需要展示的内容就是data后面json数组内的每一个小过程。

这里贴出对应的函数源代码来:

其实这个函数做的内容就是把之前httpRequest()得到的数据,处理后填到listView内。

全流程说明

很荣幸,到这里,我的这个小项目的设计规划、基本草图、布局安排、程序逻辑安排和程序中可能的难点都介绍OK了。当然还有一些细枝末节的东西,我相信如果你想复刻我这个项目,有了上面的纲领性文件,解决那些小问题都so easy!

我们再用一个图的形式,看一下这个APP一个具体的处理流程吧!

程序源码

这里直接贴出程序源码的下载地址,本人已经上传到CSDN。

https://download.csdn.net/download/qq_35295149/11178639

【安卓开发】一个简单快递查询APP实例的实现摘要的更多相关文章

  1. 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(三)(错误整理篇)

    使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(一) 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(二) 以上两篇已经把流 ...

  2. 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(一)

    梳理下使用spring+springMVC+mybatis 整合后的一个简单实例:输入用户的 ID,之后显示用户的信息(此次由于篇幅问题,会分几次进行说明,此次是工程的创建,逆向生成文件以及这个简单查 ...

  3. 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(二)(代码篇)

    这篇是上一篇的延续: 用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(一) 源代码在github上可以下载,地址:https://github.com/guoxia ...

  4. django学习-11.开发一个简单的醉得意菜单和人均支付金额查询页面

    1.前言 刚好最近跟技术部门的[产品人员+UI人员+测试人员],组成了一桌可以去公司楼下醉得意餐厅吃饭的小team. 所以为了实现这些主要点餐功能: 提高每天中午点餐效率,把点餐时间由20分钟优化为1 ...

  5. 重新想象 Windows 8 Store Apps (64) - 后台任务: 开发一个简单的后台任务

    [源码下载] 重新想象 Windows 8 Store Apps (64) - 后台任务: 开发一个简单的后台任务 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 后 ...

  6. 一个简单的Android小实例

    原文:一个简单的Android小实例 一.配置环境 1.下载intellij idea15 2.安装Android SDK,通过Android SDK管理器安装或卸载Android平台   3.安装J ...

  7. Cocos2d-x-Lua 开发一个简单的游戏(记数字步进白色块状)

    Cocos2d-x-Lua 开发一个简单的游戏(记数字步进白色块状) 本篇博客来给大家介绍怎样使用Lua这门语言来开发一个简单的小游戏-记数字踩白块. 游戏的流程是这种:在界面上生成5个数1~5字并显 ...

  8. Python开发一个简单的BBS论坛

    项目:开发一个简单的BBS论坛 需求: 整体参考“抽屉新热榜” + “虎嗅网” 实现不同论坛版块 帖子列表展示 帖子评论数.点赞数展示 在线用户展示 允许登录用户发贴.评论.点赞 允许上传文件 帖子可 ...

  9. PureMVC和Unity3D的UGUI制作一个简单的员工管理系统实例

    前言: 1.关于PureMVC: MVC框架在很多项目当中拥有广泛的应用,很多时候做项目前人开坑开了一半就消失了,后人为了填补各种的坑就遭殃的不得了.嘛,程序猿大家都不喜欢像文案策划一样组织文字写东西 ...

随机推荐

  1. Java-Web servlet控制器的引入

    一.建包 二.建立实体类 参考二维表,考虑各个字段的名字.类型 private String id; private String name; private String address; publ ...

  2. mysql创建函数槽点

    上机环境 mysql8.0 navicat for mysql 很有那么一批软件程序,要不做点脱了裤子放屁的事儿就觉得自己不够二进制似的,今儿写了一下午mysql函数,怎么都通过不了,上网一看 mys ...

  3. hiho #1043 : 完全背包

    01背包和完全背包解析 在上一节的01背包中,每种物品只能使用一次. 初始化j=V,逆序推能够保证 dp[v-c[i]] 保存的是状态是 dp[i-1][v-c[i]] ,也就是每个物品只被使用了一次 ...

  4. ToolStrip 选中某一项打勾

    (sender as ToolStripMenuItem).Checked = !(sender as ToolStripMenuItem).Checked;

  5. PuppeteerSharp体验之旅

    public static async Task<string> LogInAsync() { try { string ResultCookies = ""; //获 ...

  6. 【转】稳定婚姻问题(Stable Marriage Problem)

    转自http://www.cnblogs.com/drizzlecrj/archive/2008/09/12/1290176.html 稳定婚姻是组合数学里面的一个问题. 问题大概是这样:有一个社团里 ...

  7. selenium java 自动化测试 基于火狐浏览器/谷歌浏览器

    :环境 java1.8+ieda 直接上代码 pom.xml <?xml version="1.0" encoding="UTF-8"?> < ...

  8. 编译一个需要用特定key前面的应用程序

    LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) # Build all java files in the java subdirectory L ...

  9. C++入门经典-例3.5-判断某一年是否是闰年之嵌套判断

    1:代码如下: // 3.5.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using ...

  10. Python对字典分别按键(key)和值(value)进行排序

    使用sorted函数进行排序 sorted(iterable,key,reverse),sorted一共有iterable,key,reverse这三个参数;其中iterable表示可以迭代的对象,例 ...