基于Android的天气预报系统的设计与实现

目 录
1 绪论 1
1.1课题研究背景及意义 1
1.2国内外研究动态 1
1.2.1国外发展现状 2
1.2.2国内发展现状 3
1.3论文研究的主要内容 3
1.4论文组织结构 4
2 系统关键技术研究 6
2.1 MVC模式 6
2.2 Android平台 7
2.2.1 Android特性 7
2.2.2 Android系统架构 8
2.2.3 Android的常用基本组件 9
2.3本章小结 11
3 系统需求分析 12
3.1系统设计目标 12
3.1.1设计目标 12
3.1.2设计原则 12
3.2系统需求分析 13
3.3性能分析 14
3.4本章小结 14
4 系统总体设计 15
4.1程序设计 15
4.1.1用户界面设计 15
4.1.2程序模块设计 16
4.1.3程序开发 18
4.2系统总体架构设计 19
4.2.1基于MVC的系统架构设计 19
4.2.2视图层设计 20
4.2.3模型层设计 21
4.2.4控制层设计 21
4.3本章小结 22
5 天气预报系统的实现 23
5.1系统开发环境以及设计思路 23
5.2系统关键技术实现 23
5.2.1数据存储 23
5.2.2 Files 24
5.3系统功能模块实现 28
5.4系统界面的实现与展示 29
5.5本章小结 36
6 系统性能测试与分析 37
6.1系统测试方法介绍 37
6.2系统部分功能模块测试 37
6.3系统部分性能测试 41
6.3.1指标定义 41
6.3.2测试结果记录 42
6.3.3测试结论 42
6.4本章小结 42
7 总结与展望 44
7.1总结 44
7.2未来展望 44
参考文献 46
1.3论文研究的主要内容
本文主要研究的是如何实现一个相对完整的,界面舒适的天气预报系统。该系统主要是基于Android Studio开发的,使用的是java编程语言。在参照市面上现有的天气预报系统的基础上,力争做到界面美观大方,功能简洁齐全。而研究的就是如何设计前端的界面,以及如何实现前端与后台的交互。而最重要的则是如何联网获取天气信息以及获取天气信息以后显示在界面上并根据天气信息给出相关的出行生活建议。综上所述便是我们认为的一个合格的天气预报系统。
课题主要的研究内容如下:
(1)首先是系统的需求分析,通过网络调查以及统计身边同学手机上是否需求天气预报这一App,来客观分析我们的系统在市场上有无需求,以及通过从互联网上搜集出来的现有的天气预报App的源代码拿来研究。研究其系统的复杂性来考虑是否能够实现。
(2)介绍并分析了天气预报系统的相关开发技术以及特性。最为主要研究的是系统开发中涉及到的必要技术,这包括基于Android Studio的开发模式和MVC模式,以及如何联网获取天气信息,主要需要获取的资源有温度、天气信息和出行建议等等。前端方面需要设计的几个Actively之间的联系和通信。通过分析和对比各种技术的特性及不足之处,基于笔者的掌握情况和系统的具体需求,明确了本系统的开发技术和工具选择,根据需求分析的结果,完成这样一个系统的总体设计。
(3)设计实现基于Android Studio的总体构架,数据库方面因为本系统主要是通过联网获取的,所以不需要数据库的支持。
(4)设计实现完成天气预报系统,实现系统的功能分析和模块划分,并对研发的产品进行全面的测试,根据测试结果反映的问题进行修复和优化处理。
1.4论文组织结构
本论文共计七章,组织结构安排内容如下:
第一章,绪论。着重介绍了课题研究背景及意义,国内外研究动态,以及论文研究的主要内容。
第二章,系统关键技术研究。这一章详细介绍了本次毕业设计所必须的技术,其中包括Android系统、Android的基本框架和组件、MVC框架以及Android Studio开发环境,介绍了如何构建一个合格的天气预报系统。目的是为了为以后的正式工作夯实基础,把每一个看似不重要的准备做好才能够在正式工作开始的时候游刃有余。
第三章,系统需求分析。本次设计的主要要求是要设计出一个天气预报系统,在正式设计之前必须要按照流程做出需求分析和可行性研究报告等。这些工作虽然繁琐却是在正式工作开始之前必备的,必须搞清楚本次设计的系统的市场需求。这一章明确了功能需求并将其总结成需求分析说明。
第四章,系统总体设计。本章在第二章的关键技术研究和第三章的需求分析的基础之上,对系统的整体架构设计进行了介绍,并阐释了系统的功能模块划分和数据库设计等,对微信营销管理系统的最终实现做出了必要的准备。
第五章,天气预报系统的实现。实现整个系统是本次课程设计的主要目标,本章主要介绍了本系统的开发环境和关键技术的实现,以及系统功能模块和系统界面的实现问题。本系统的实现需要的代码量很大,无法将代码全部写入文档中,因此本章只对核心模块重点叙述实现的方法和过程。
第六章,系统性能测试与分析。本章对系统的部分功能模块以及系统的性能进行了测试,详细分析了系统是否充分符合了需求,并给出了相关的修改意见。
第七章,总结与展望。本章对系统的实现过程进行总结和归纳,并针对系统的具体实现情况提出了系统有待改进之处,最后对后续工作进行了描述。

4 系统总体设计
4.1程序设计
4.1.1用户界面设计
根据需求分析可以知道,应用程序应包含四个主要的用户界面,以及几个辅助页面,这里需要进一步分析每个用户界面中应该包括哪些显示内容。根据项目的需求,当程序启动时,会进行判断用户的设置情况,然后将根据判断的结果从数据库读取相对应的数据,反馈回用户操作界面。由这些基本需求,我们可以知道要构成用户的操作界面主要有两个,一个是天气信息显示的主界面,本文转载自http://www.biyezuopin.vip/onews.asp?id=13813以及用户设置地理位置的设置界面。
在城市天气页面,如图4-1,分为上中下三个部分,上面部分显示用户设定的首要城市的城市名、当日温度区间、天气情况、风力大小、湿度、紫外线强度,实时温度及实时天气的图标。中间是三个自定义View,显示未来三天的天气情况,每个View中都包括日期、星期、天气图标、最高温度、最低温度。底部显示了当前天气的更新时间,及手动更新天气的按钮。
在这里插入图片描述

图4-1 城市天气
生活指数页面,如图4-2,生活指数页面,通过下拉列表选择不同的生活指数种类,显示各种生活指数,包括:空气质量,PM指数,生活建议,舒适度,洗车指数,运行建议等。
在这里插入图片描述

图4-2 生活指数
4.1.2程序模块设计
从功能需求上分析可以看出,整个应用程序应划分为3个模块,分别是用户界面模块、后台控制模块和基础功能模块。后台控制模块更具用户界面的需求调用基础功能模块的各项功能得到用户界面需要的数据并返回到用户界面。基础工具模块提供天气查询、网络状况检查、数据存取、数据处理4个功能模块;后台控制模块分为城市管理、dialog调用两个部分;用户界面模块包括,城市天气、城市管理、生活指数、城市简介、操作提示几个部分组成。如图4-3所示,我们理想的情况下用户界面中应该包含如下几个模块,即城市天气,城市设定,生活指数,城市简介以及添加城市等等。当然这是参考市面上做的最为复杂的天气预报系统所制定的程序设计模块。我们的系统以简洁明了为特点。力求代码的复用性高,获取数据的方式简单,只要能将天气信息显示在用户的面前,准确地把实时天气信息反馈给用户。

package com.free.freeweather.util;

import android.text.TextUtils;

import com.free.freeweather.db.City;
import com.free.freeweather.db.County;
import com.free.freeweather.db.Province;
import com.free.freeweather.gson.Weather;
import com.google.gson.Gson;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;



public class Utility {
    /*
     *  解析和处理服务器发回的省级数据
     */

    public static boolean handleProvinceResponse(String response){
        if (!TextUtils.isEmpty(response)){
            try {
                JSONArray allProvinces = new JSONArray(response);
                for (int i = 0; i < allProvinces.length(); i++){
                    JSONObject provinceObject = allProvinces.getJSONObject(i);
                    Province province = new Province();
                    province.setProvinceName(provinceObject.getString("name"));
                    province.setProvinceCode(provinceObject.getInt("id"));
                    province.save();
                }
                return true;
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
        return false;
    }

    /*
     *  解析和处理服务器返回的市级数据
     */

    public static boolean handleCityResponse(String response, int proviinceId){
            if (!TextUtils.isEmpty(response)){
                try {
                    JSONArray allCities = new JSONArray(response);
                    for (int i = 0; i < allCities.length(); i++){
                        JSONObject cityObject = allCities.getJSONObject(i);
                        City city = new City();
                        city.setCityName(cityObject.getString("name"));
                        city.setCityCode(cityObject.getInt("id"));
                        city.setProvinceId(proviinceId);
                        city.save();
                    }
                    return true;
                } catch (JSONException e) {
                    e.printStackTrace();
                }

            }

        return false;
    }

    /*
     *  解析和处理服务器返回的县级数据
     */

    public static boolean handleCountyResponse(String response, int cityId){
        if (!TextUtils.isEmpty(response)){
            try {
                JSONArray allCounties = new JSONArray(response);
                for (int i = 0; i < allCounties.length(); i++){
                    JSONObject countyObject = allCounties.getJSONObject(i);
                    County county = new County();
                    county.setCountyName(countyObject.getString("name"));
                    county.setWeatherId(countyObject.getString("weather_id"));
                    county.setCityId(cityId);
                    county.save();
                }
                return true;
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
        return false;
    }


    //将返回的JSON数据解析成Weather实体类

    public static Weather handleWeatherResponse(String response){
        try {
            JSONObject jsonObject = new JSONObject(response);
            JSONArray jsonArray = jsonObject.getJSONArray("HeWeather");
            String weatherContent = jsonArray.getJSONObject(0).toString();
            return new Gson().fromJson(weatherContent, Weather.class);
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return null;
    }



}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/sheziqiong/article/details/127295540
今日推荐