资源预览内容
第1页 / 共9页
第2页 / 共9页
第3页 / 共9页
第4页 / 共9页
第5页 / 共9页
第6页 / 共9页
第7页 / 共9页
第8页 / 共9页
第9页 / 共9页
亲,该文档总共9页全部预览完了,如果喜欢就下载吧!
资源描述
第四章 程序实现4.2 程序界面设计图4-1 程序界面程序界面采用蓝白灰搭配的简洁配色和扁平化的视觉设计,减少用户的认知成本。在APP Inventor中采用Screen Arrangement控件对屏幕进行分割与排版来保持界面美观。图4-2 界面布局程序一共有3屏,分别是Screen1摇一摇定位界面、Screen2定位信息和Screen3数据记录。每个Screen之间可以跳转返回。4.3 程序架构设计Screen1摇一摇定位界面,当用户晃动手机触发定位功能。当手机定位成功获取到经纬高度数据时,便将数据传到Screen2。当定位失败,没有获取到数据,Screen1就会触发一个计时器,每0.5秒重新获取一次经纬高度,此时界面显示正在定位。直至获取到信息后才会打开Screen2,否则一直停留在Screen1。Screen2定位信息界面。Screen2接受到Screen1传来的经纬高度信息后通过WebPost向API发送请求,WebGet获取API返回的数据进行处理从而将结果显示到Screen2。用户录入设备信息后按保存按钮,Screen2将通过WebPost向数据库上传数据。图4-3 程序界面流程图Screen3数据记录。数据记录可对数据库的数据进行浏览、删除、发送的操作。4.4 摇一摇功能当用户晃动手机,重力传感器AccelerometerSensor触发震动效果并激活GPS定位功能。4.5 GPS定位功能GPS定位功能是调用了LocationSensor部件获取经纬高度信息。手机晃动,计时器Clock2生效。Clock2生效时每0.5秒触发一次。当获取的Latitiude不等于0时,也就是成功获取经纬高度信息时,Clock2失效,同时将数据传到Screen2并打开Screen2。图4-4 摇一摇定位功能编程 GPS定位成功的判断过程在Screen1完成。4.6 API调用利用APP Inventop里的Web组件对API进行调用,利用Web.get来获取返回的数据程序。一共调用了3个API。第一个是转换坐标的API:http:/map.yanue.net/gpsApi.php?lat=22.502412986242&lng=113.93832783228将经纬度发送过去获得转换后的百度坐标系的经纬高度。第二个是获取静态地图的API:http:/api.map.baidu.com/staticimage?center=116.403874,39.914888&width=300&height=200&zoom=11将转换后的经纬高度发送过去获得对应经纬高度的静态地图。第三个是获取街道名称的API:http:/api.map.baidu.com/geocoder?location=23.16177945888,112.57470709225&output=json&key=E78ebbf34f3b7d067d7b94a18dd642bb将转换后的经纬高度发送过去获得对应街道地址。图4-5 Json解码编程第一个和第三个API的返回值是包含结果的JSON值,需要将结果提取出来。Web1即第一个API的JSON提取如图。4.7 信息录入功能利用ListPicket组件,可让对设备类型进行选择,texebox组件可获得用户输入的设备信息。右图是将用户选择的设备类型的值+用户输入的设备信息的值设为tag的值。将经纬高度信息的值设为val值。图4-6 信息录入功能编码4.8 新浪SAE数据库的搭建程序中所使用的网络数据库是新浪SAE的MySQL数据库。首先在新浪SAE注册一个开发者账号,注册完毕就就能使用MySQL服务。数据库的PHP代码如下runSql ( $sql );echo 1;break;case 2 :$result = mysql_query ( SELECT * FROM test1 where tag= . $tag . ); / 下载数据while ( $row = mysql_fetch_array ( $result ) ) echo $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;case 5 :$sql = update test1 set value = . $value . where tag = . $tag . ;$mysql-runSql ( $sql );echo 1; / 更换数据break;default :echo 0;$mysql-closeDb ();?数据库的访问连接为http:/1.chyang2014.sinaapp.com/index.php?ord=1通过修改ord=1,2,3,4,5的值来实现不同的功能。1为上传数据,2为获取所有tag,3为获取所有val,4为删除指定tag的数据,5为替换指定tag的数据。4.9 数据操作功能图4-7 数据上传功能编程4.9.1 数据上传功能利用web组件访问网址http:/1.chyang2014.sinaapp.com/index.php?ord=1,利用Web.Post将tag和val的值上传到数据库4.9.2 数据删除功能同理,利用web组件访问网址http:/1.chyang2014.sinaapp.com/index.php?ord=4,利用Web.Post将tag的值上传到数据库就能删除对应的val和tag。4.9.3 数据发送功能利用ActivityStarter1组件,呼叫的action为 android.intent.action.SEND,ExtraKey为android.intent.extra.TEXT即可呼出类似分享按钮的功能。通过这个Acivity,可将经纬高度信息通过短信、微信、邮件、QQ等以分享方式发送出去。4.9.4数据列表获取利用web组件访问http:/1.chyang2014.sinaapp.com/index.php?ord=2图4-8 数据记录界面和http:/1.chyang2014.sinaapp.com/index.php?ord=3获取所有的tag和val值,并将它们逐个显示到label中。当中利用tag数组的长度来确定列表的长度。第五章 程序调试与测试第五章 程序调试与测试在开发过程中,遇到两个难题导致程序一直报错,最后经过调试后终于得以解决。5.1 Screen2定位信息报错Screen2定位信息报错的原因由于当初没有在Screen1设置判断经纬高度的数值。若果定位失败,经纬高度的值为0.0,0.0,0.0。当Screen2将这串数值发送到API后,返回的结果跟正常结果不同,使原本Screen2中的Json解析函数不能解析,发生错误导致程序报错。解决办法:在Screen1中设置定位是否成功的判断,如图4-所示,当LocaticonSensor1.Latitude不等于0,也就是定位成功后才执行后边的语句,否则就重复获取经纬高度直至LocaticonSensor1.Latitude不等于0。图5-1 程序报错信息5.2 Screen3数据记录报错Screen3数据记录报错的原因是原来列表项数的判断位于tag数组的语句中, val数组语句中并没有根据数据长度来决定列表项数。当网速受影响,val数组获取快于tag数组,由于没有判读列表项数,空列表会执行读取语句导致读取到空的数组导致程序报错。解决办法:添加val数组中列表项数的判断。图5-2 添加的代码5.3 录入信息设置限制字符图5-4 限制字符提示图5-3 限制字符编程数据库中返回的tag值是由“,”来隔开每一个值。所以如果tag数组中(即设备类型+设备信息)含有“,”将影响Screen3中数据列表的解析,从而导致列表结果显示出错。所以在输入设备信息中加入限制的字符,当输入的设备信息含有该字符时,程序会出现相应提示。5.4 程序测试本次以学校输电线路爬杆实训基地的三座铁塔为例,分别测试三座铁塔的经纬高度。图5-5 定位测试杆塔,分别为杆塔1、杆塔2、杆塔3经采用GPS信号的方式来定位,测出三座杆塔的经纬高度数据如下图:图5-6 测试数据图5-7 测试数据在地图显示将坐标转换成以百度地图为参考系的坐标后,显示在百度地图上如图所示。坐标情况基本符合实际情况,误差在允许的范围内。
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号