首页 范文大全 古典文学 职场知识 中国文学 公文书信 外国名著 寓言童话 百家讲坛 散文/诗歌 美文欣赏 礼仪知识 民俗风情
  • 范文大全
  • 古典文学
  • 职场知识
  • 中国文学
  • 公文书信
  • 外国名著
  • 寓言童话
  • 百家讲坛
  • 散文/诗歌
  • 美文欣赏
  • 礼仪知识
  • 民俗风情
  • 谜语大全
  • 名言警句
  • 安卓天气预报查询app实验报告

    时间:2020-11-09 12:20:20 来源:蒲公英阅读网 本文已影响 蒲公英阅读网手机站

    相关热词搜索:天气预报 实验 报告

      课 程 设 计 报 告

     课程名称 : 移动平台开发设计题目:

     天气预报 院 系:

     计算机科学与工程学院

     专 业:

     计算机科学与技术班 级:

     学 号:

     姓 名:

      指导教师:

     孙 霞

     设计地点:

     开课时间:

      2016 N6-113

     至 2017

      学年第 1

      学期

     目录 1. 引言 ........................................................... 错误 ! 未定义书签。

     . 题目描述 ................................................... 错误 ! 未定义书签。

     . 设计意义 ................................................... 错误 ! 未定义书签。

     2. 开发环境 ....................................................... 错误 ! 未定义书签。

     . 硬件环境 ................................................... 错误 ! 未定义书签。

     . 软件环境 ................................................... 错误 ! 未定义书签。

     3. 相关技术及知识点 ................................................ 错误 ! 未定义书签。

     . Activity ................................................... 错误! 未定义书签。

     . Service .................................................... 错误! 未定义书签。

     . 网络通信 ................................................... 错误 ! 未定义书签。

     4. 需求分析 ....................................................... 错误 ! 未定义书签。

     . 系统功能需求分析 . ........................................... 错误 ! 未定义书签。

     . 系统流程图 ................................................. 错误 ! 未定义书签。

     . 系统界面需求分析 . ........................................... 错误 ! 未定义书签。

     . 系统性能需求分析 . ........................................... 错误 ! 未定义书签。

     5. 设计与实现 ..................................................... 错误 ! 未定义书签。

     . 界面布局 ................................................... 错误 ! 未定义书签。

     . 省市二级联动 ................................................ 错误 ! 未定义书签。

     . 获取天气数据 ................................................ 错误 ! 未定义书签。

     . 播放背景音乐 ................................................ 错误 ! 未定义书签。

     6. 个人总结 ....................................................... 错误 ! 未定义书签。

     参考资料 ........................................................... 错误 ! 未定义书签。

     1. 引言

      1.1. 题目描述 本次实验是开发一款基于 Android 平台的天气预报应用, 将网络系统的功能扩展到智能手机终端上, 让手机能够通过移动网络访问 Web网站并处理各种各样的业务, 可以让智能手机用户能够随时随地查询互联网所提供的天气信息。

     1.2. 设计意义 可以让广大 Android 手机用户能够在第一时间获取最新的天气预报信息, 以便提前预防, 方便出行。同时,把气象灾害造成的损失降到最低,也可以提高公共服务质量,更好的发挥气象事业对 经济社会发展的现实性作用,有巨大的实用价值。

     虽然该技术在 Android 平台已经比较成熟,但是 通过该软件的开发仍然能帮助我更好的认识 Android 系统的工作原理。

      2. 开发环境

      2.1. 硬件环境 戴尔灵越笔记本电脑

     2.2. 软件环境 Android

     的上层应用程序是用

     Java 语言开发的,一般情况下是基于

     Dalvik 虚拟机的,所以Google 公司推荐使用主流的 Java 集成开发环境

     Eclipse 。而用 Java 语言进行开发,需要用到 SUN 公司提供的 Java SDK(其中包括 JRE:

     Java

     Runtime

     Environment) 。此外, Android 的应用程序开发和 Java 开发有较大区别的,需要使用 Google 提供的 Android

     SDK。同时,要在

     Eclipse 上安装 ADT,为 Android 开发提供开发工具的升级或者变更,是

     Eclipse

     下开发工具的升级或下载

     的工具。

     简言之,需要以下软件,才能搭建 Android 开发环境,从而进行 Android 应用程序的开发。

     (1) Java SDK (2) Eclipse

     (3) Android SDK (4) ADT

      3. 相关技术及知识点

      3.1. Activity

     应用程序中,一个 Activity 通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。

     Activity 之间通过 Intent 进行通信。在 Intent 的描述结构中,有两个最重要的部分:动作和动作对应的数据。

     典型的动作类型有:

     M AIN( activity 的门户)、 VIEW、PICK、EDIT

      等。而动作对应的数据则以 URI 的形式进行表示。例如:要查看一个人的联系方式, 你需要创建一个动作类型为 VIEW 的intent ,以及一个表示这个人的 URI。

     与之有关系的一个类叫 IntentFilter

     。相对于 intent

     是一个有效的做某事的请求,一个intentfilter

     则用于描述一个 activity (或者 IntentReceiver )能够操作哪些

     intent 。一个activity

     如果要显示一个人的联系方式时,需要声明一个 IntentFilter

      ,这个 IntentFilter 要知道怎么去处理

     VIEW 动作和表示一个人的

     URI。IntentFilter

      需要在 中定义。通过解析各种intent ,从一个屏幕导航到另一个屏幕是很简单的。当向前导航时,

     activity 将会调用startActivity(Intent myIntent)

      方法。然后,系统会在所有安装的应用程序中定义的 IntentFilter

     中查找, 找到最匹配 myIntent 的 Intent 对应的 activity 。新的 activity 接收到myIntent 的通知后,开始运行。当

     startActivity 方法被调用将触发解析

     myIntent 的动作,这个机制提供了两个关键好处:

     A、Activities 能够重复利用从其它组件中以 Intent 的形式产生的一个请求;

     B、Activities 可以在任何时候被一个具有相同 IntentFilter 的新的 Activity 取代。

     3.2. Service

     一个 Service 是一段长生命周期的,没有用户界面的程序,可以用来开发如监控类程序。

     比较好的一个例子就是一个正在从播放列表中播放歌曲的媒体播放器。

     在一个媒体播放器的应用中,应该会有多个 activity ,让使用者可以选择歌曲并播放歌曲。然而,音乐重放这个功能并 没有对应的 activity ,因为使用者当然会认为在导航到其它屏幕时音乐应该还在播放的。在这个 例子中,媒体播放器这个 activity

      会使用 () 来启动一个

     service ,从而可以在后台保持音乐的播放。同时,系统也将保持这个 service 一直执行,直到这个 service 运行结束。另外,我们还可以通过使用 () 方法,连接到一个

     service

     上(如果这个 service 还没有运行将启动它)。当连接到一个 service 之后,我们还可以 service 提供的接口与它进行通讯。拿媒体播放器这个例子来 说,我们还可以进行暂停、重播等操作。

      ,

      3.3. 网络通信 JSON数据解析:

     ( 1)

     JavaScript Object Notation 是一种轻量级的数据交换格式; ( 2)

     Android API 中直接支持对 JSON数据的处理; ( 3)常用类 JSONObject、JSONArray、JSONStringer 和 JSONTokener等; ( 4)数据在名称 / 值对中、数据由逗号分隔、花括号保存对象、方括号保存数组。

     HttpURLConnection :

     提供了基于 HTTP的网络访问方法,主要的操作步骤为:

     (1)

     利用 URL地址实例化 URL类; (2)

     由 URL类创建 HttpURLConnection 对象; (3)

     以 GET/POST方式向服务器发送请求; (4)

     接收服务器响应。

      4. 需求分析

      4.1. 系统功能需求分析 ( 1)

     能够由用户设置省份城市; ( 2)

     根据用户设置的城市,点击刷新按钮获取当地当天的日期、天气信息以及未来六天的天气情况。

     ( 3)

     以淡入淡出的方式显示主页面; ( 4)

     打开软件时可以自动播放音乐,用户可以在 Menu菜单里选择关闭音乐; ( 5)

     Menu菜单里可以查看开发者信息。

     4.2. 系统流程图 Service 使用步骤如下 : ( 1)继承 service 类; ( 2)配置清单文件中 <application> 节点里对服务进行配置 <service name=".SMSService"/> 。

     服务不能自己运行 , 需要通过 () 或() 启动服务 通过 startService() 方法启动的服务于调用者没有关系 , 即使调用者关闭了 , 服务仍然运行想停止 服务要调用 (), 此时系统会调用 onDestory(), 使用此方法启动时 , 服务首次启动系统先调用服务的 onCreate()-->onStart(), 如果服务已经启动再次调用只会触发 onStart() 方法。

     使用 bindService() 启动的服务与调用者绑定 , 只要调用者关闭服务就终止 , 使用此方法启动时 服务首次启动系统先调用服务的 onCreate()-->onBind(), 如果服务已经启动再次调用不会再触发 这 2 个方法 , 调用者退出时系统会调用服务的 (), 系统依次调用 onUnbind()-->onDestory() onUnbind()-->onDestory(), 想主动解除绑定可使用 。

      4.4. 系统性能需求分析 软件在完成功能需求之后, 还要进一步的优化, 不能占用手机太多的内存资源, 在交互性上使用户获得最佳感受,让使用不同手机设备的用户都能有良好地体验。

     打开软件 界面启动 否 网络连接 是 进入主界面 播放音乐 选择城市 刷新天气 结束 图 4-1 系统流程图 4.3. 系统界面需求分析 目前国内软件开发者在设计过程中很注重软件的开发技术及其具有的业务功能, 而忽略了用户 对软件界面的需求,影响软件的易用性、友好性。

     界面设计要简约、美观,不能太复杂,让用户操 作起来太繁琐, 影响用户的使用体验, 要在交互性与应用性上让用户感到舒适, 让用户 准确、高效、 轻松、愉快地完成天气的查询 ,所以软件的友好性、易用性对软件系统至关重要。

     5. 设计与实现

     5.1. 界面布局 在页面的布局上,因为界面设计的比较简单, 所以只使用了基础的横向布局和纵向布局,横向布局与纵向布局交替使用,完成了天气预报的界面设计。

     图 5-1 界面布局 图 5-2 软件主界面

      图 5-3 启动界面 图 5-4 天气信息界面

      图 5-5 刷新界面 图 5-6 作者信息界面

     5.2. 省市二级联动 将老师给的中国省市的编号手动输入到文件中,再定义省份和城市编号两个数组,再定义

      ArrayAdapter ,在两个下拉框上分别放上监听器, 将省份与城市进行绑定, 将所选择的城市的城市编号存放到一个数组之中,以便之后进行天气信息的获取。

     关键代码:

     private int [] cities = { }; private int [] citycode = {

     }; ( new OnClickListener() {

     @Override public void onClick(View v) { nflate( null ); sp1 = (Spinner) sp2 = (Spinner) ( new OnItemSelectedListener() {

     @Override public void onItemSelected(AdapterView<> parent, View view, int position, long id) { etStringArray( citycode [position]); }

     @Override public void onNothingSelected(AdapterView<> parent) { oString()); cityId = st1 ; ( "city" ,().toString()); ( "citycode" , cityId ); (); refresh(); } });

     } }); ( " 取消" , null ); AlertDialog dialog = (); ();

     图5-7 选择省份 图5-8 选择省份

     5.3. 获取天气数据 获取天气信息主要使用的是 HttpURLConnection 类,提供了基于 HTTP的网络访问方法, 由 URL 类创建 HttpURLConnection 对象,以 GET/POST方式向服务器发送请求,接收服务器响应,最后通过 JSON数据解析,将解析得到数据绑定到相应的组件中。

     关键代码:

     public void refresh() { builder = new ; View v1 = .inflate( null ); ( "Waiting" );

     refresh_textView = (TextView) ( " 正在送来 " +()+ " 的天气信息 " ); (v1); final AlertDialog dialog = (); new Thread() { public void run() { String url = "&weaid=" + cityId + "&&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json" ;

     ( "da11111" , url); HttpClient client = new DefaultHttpClient(); HttpGet get = new HttpGet(url); try { HttpResponse response = (get); HttpEntity is = (); parseJson(is));

     (); } catch (ClientProtocolException e) { tart(); new Thread() { public void run() { try { sleep (1000); (); } catch (InterruptedException e) { tart(); }

      public

     void

     parseJson(String jsondata) { try { Message msg = (); Bundle data = newBundle(); JSONObject ob = newJSONObject(jsondata); JSONArray arr = (

     "result" ); StringBuilder sb = newStringBuilder(); for ( int i = 0; i < (); i++) { JSONObject job = (JSONObject) (i); ( "days" ) + "," ); ( "da" , "" ); ( "week" ) + "," ); ( "temperature" ) + "," ); ( "humidity" ) + "," ); ( "weather" ) + "," ); ( "wind" ) + "," ); ( "winp" ) + "," ); ( "weather_icon" ) + "," ); ( "weather_icon1"

     )); ( "key" + i, ()); (data); (0);

     }

      (msg); } catch (JSONException e) { penConnection(); (3000); ( "GET"); int code1 = (); URL url2 = newURL(img2_url); HttpURLConnection conn2 = (HttpURLConnection) url2 .openConnection(); (3000); ( "GET"); int

     code2 = (); if (code1 == && code2 == { InputStream is1 = (); InputStream is2 = (); bp = (is1); bp1 = (is2); (1);

      } } catch (MalformedURLException e) { tart(); }

      handler = new Handler() { @Override public void handleMessage(Message msg) { etString(

     "key" + 0); String[] st = ( "," ); ( " 今天" +st[1]); (st[0]); (st[4]); (st[2]); (st[3]); (st[6]); (st[5]); String img1_url = st[7].toString(); String img2_url = st[8].toString(); ( "ersdfsfgdvystnsdbrev" , img2_url); getImg(img1_url, img2_url); handler1 = new Handler() { @Override public void handleMessage(Message msg) {

      // TODOAuto-generated method stub (msg); if == 1) { ( bp); ( bp1); } } }; }

     5.4. 播放背景音乐 在 src

     中新建一个 service 类,在其中实现播放音乐的功能, 在主程序中调用时, 直接用 intend 跳转,想要停止播放时,直接停止这个 service 就可以了。关键代码:

     public class PlayMusic extends Service { private MediaPlayer

     mp;

     @Override public IBinder onBind(Intent intent) { // TODOAuto-generated method stub return null ; }

     @Override public void onCreate() { // TODOAuto-generated method stub (); mp=( this , ( true ); }

     @Override @Deprecated public void onStart(Intent intent, int startId) { // TODOAuto-generated method stub (intent, startId); (); }

     @Override public void onDestroy() { // TODOAuto-generated method stub (); if ())

     (); (); }

      }

      6. 个人总结

      本次大作业是做一个小 app,但整合了这一学期上课所学的知识,由于平时上课知识掌握的不怎么牢靠, 做起来还是有一点难度的,因此我遇到了很多问题,通过上网查找资料以及在同学的悉心帮 助与指导下,终于顺利完成了这次的期末大作业。

     但要想完全掌握本学期所学的知识, 还需在平时 多加努力,多加练习。这门课很有趣,带给了我许多兴趣与挑战,我相信在以后的学习中,会逐渐掌握这门课的技术。

     参考资料

      [1] 张荣,宋辉,曹小鹏《 Android 开发与应用》 ,人民邮电出版社, 2014

     年 2 月第 1 版 [2] 百度文库, CSDN ,

      评语:

      成绩

     指导教师

     年 月 日

    • 范文大全
    • 职场知识
    • 精美散文
    • 名著
    • 讲坛
    • 诗歌
    • 礼仪知识