1、第四章 程序实现4.2 程序界面设计程序界面采用蓝白灰搭配的简洁配色和扁平化的视觉设计,减少用户的认知成本。在APP Inventor 中采用 Screen Arrangement 控件对屏幕进行分割与排版来保持界面美观。程序一共有 3 屏,分别是 Screen1 摇一摇定位界面、Screen2 定位信息和 Screen3 数据记录。每个 Screen 之间可以跳转返回。图 4-1 程序界面图 4-2 界面布局华南理工大学广州学院本科毕业设计(论文)说明书4.3 程序架构设计Screen1 摇一摇定位界面,当用户晃动手机触发定位功能。当手机定位成功获取到经纬高度数据时,便将数据传到 Scree
2、n2。当定位失败,没有获取到数据,Screen1 就会触发一个计时器,每 0.5 秒重新获取一次经纬高度,此时界面显示正在定位。直至获取到信息后才会打开 Screen2,否则一直停留在 Screen1。Screen2 定位信息界面。 Screen2 接受到Screen1 传来的经纬高度信息后通过 WebPost向 API 发送请求,WebGet 获取 API 返回的数据进行处理从而将结果显示到 Screen2。用户录入设备信息后按保存按钮,Screen2将通过 WebPost 向数据库上传数据。Screen3 数据记录。数据记录可对数据库的数据进行浏览、删除、发送的操作。4.4 摇一摇功能当用
3、户晃动手机,重力传感器AccelerometerSensor 触发震动效果并激活 GPS 定位功能。4.5 GPS 定位功能GPS 定位功能是调用了LocationSensor 部件获取经纬高度信息。手机晃动,计时器 Clock2 生效。Clock2生效时每 0.5 秒触发一次。当获取的Latitiude 不等于 0 时,也就是成功获取经纬高度信息时,Clock2 失效,同时将数据传到 Screen2 并打开 Screen2。GPS 定位成功的判断过程在 Screen1完成。摇一摇开始定位是否定位成功定位信息数据记录是否数据是否符合是否S c r e e n 1S c r e e n 2S c
4、 r e e n 3图 4-3 程序界面流程图图 4-4 摇一摇定位功能编程第四章 程序实现4.6 API 调用利用 APP Inventop 里的 Web 组件对 API 进行调用,利用 Web.get 来获取返回的数据程序。一共调用了 3 个 API。第一个是转换坐标的 API:http:/ 1;break;case 2 :$result = mysql_query ( “SELECT * FROM test1 where tag=“ . $tag . “ “ ); / 下载数据第四章 程序实现while ( $row = mysql_fetch_array ( $result ) ) e
5、cho $row value . ,;break;case 3 :$sql = “SELECT * FROM test1“; / 获取所有 val$result = mysql_query ( $sql );while ( $row = mysql_fetch_array ( $result ) ) echo $row value . ,;break;case 4 :$sql = “delete from test1 where tag = “ . $tag . “;/ 获取所有 tag$mysql-runSql ( $sql );echo 1; / 删除指定 tag 的数据break;cas
6、e 5 :$sql = “update test1 set value = “ . $value . “ where tag = “ . $tag . “;$mysql-runSql ( $sql );echo 1; / 更换数据break;default :echo 0;华南理工大学广州学院本科毕业设计(论文)说明书$mysql-closeDb ();?数据库的访问连接为 http:/ ord=1,2,3,4,5 的值来实现不同的功能。1 为上传数据,2 为获取所有 tag,3 为获取所有 val,4 为删除指定 tag 的数据,5 为替换指定 tag 的数据。4.9 数据操作功能4.9.1
7、 数据上传功能利用 web 组件访问网址http:/ Web.Post 将 tag 和 val 的值上传到数据库4.9.2 数据删除功能同理,利用 web 组件访问网址 http:/ 将 tag 的值上传到数据库就能删除对应的 val 和 tag。4.9.3 数据发送功能利用 ActivityStarter1 组件,呼叫的 action 为 android.intent.action.SEND,ExtraKey 为 android.intent.extra.TEXT 即可呼出类似分享按钮的功能。通过这个 Acivity,可将经纬高度信息通过短信、微信、邮件、QQ 等以分享方式发送出去。4.9.
8、4 数据列表获取利用 web 组件访问http:/ http:/ 获取所有的 tag和 val 值,并将它们逐个显示到 label 中。当中利用 tag 数组的长度来确定列表的长度。图 4-7 数据上传功能编程图 4-8 数据记录界面第五章 程序调试与测试第五章 程序调试与测试在开发过程中,遇到两个难题导致程序一直报错,最后经过调试后终于得以解决。5.1 Screen2 定位信息报错Screen2 定位信息报错的原因由于当初没有在 Screen1设置判断经纬高度的数值。若果定位失败,经纬高度的值为 0.0,0.0,0.0。当 Screen2 将这串数值发送到 API 后,返回的结果跟正常结果不
9、同,使原本 Screen2 中的 Json 解析函数不能解析,发生错误导致程序报错。解决办法:在 Screen1 中设置定位是否成功的判断,如图 4-所示,当LocaticonSensor1.Latitude 不等于 0,也就是定位成功后才执行后边的语句,否则就重复获取经纬高度直至LocaticonSensor1.Latitude 不等于 0。5.2 Screen3 数据记录报错Screen3 数据记录报错的原因是原来列表项数的判断位于 tag 数组的语句中, val 数组语句中并没有根据数据长度来决定列表项数。当网速受影响,val 数组获取快于 tag 数组,由于没有判读列表项数,空列表会执
10、行读取语句导致读取到空的数组导致程序报错。解决办法:添加 val 数组中列表项数的判断。图 5-1 程序报错信息图 5-2 添加的代码华南理工大学广州学院本科毕业设计(论文)说明书5.3 录入信息设置限制字符数据库中返回的 tag 值是由“,”来隔开每一个值。所以如果 tag 数组中(即设备类型+设备信息)含有“,”将影响 Screen3 中数据列表的解析,从而导致列表结果显示出错。所以在输入设备信息中加入限制的字符,当输入的设备信息含有该字符时,程序会出现相应提示。5.4 程序测试本次以学校输电线路爬杆实训基地的三座铁塔为例,分别测试三座铁塔的经纬高度。图 5-3 限制字符编程 图 5-4 限制字符提示图 5-5 定位测试杆塔,分别为杆塔 1、杆塔 2、杆塔 3第五章 程序调试与测试经采用 GPS 信号的方式来定位,测出三座杆塔的经纬高度数据如下图:将坐标转换成以百度地图为参考系的坐标后,显示在百度地图上如图所示。坐标情况基本符合实际情况,误差在允许的范围内。图 5-6 测试数据图 5-7 测试数据在地图显示