Android简单的天气预报

接口用的百度的天气接口:

http://api.map.baidu.com/telematics/v3/weather?location=北京&output=json&ak=yourkey
百度ak申请地址:http://lbsyun.baidu.com/apiconsole/key

城市用spinner类存放,读取xml文件,填充到spinner中。xml文件时在本地的res/raw文件夹中。

并且给三个spinner添加监听事件。当选择省份时,存放城市和地区的spinner会作相应变化,同样,选择城市时,地区的spinner会作相应变化。

// 当选择省份时,城市和地方列表会变化
		sp_province.setOnItemSelectedListener(new OnItemSelectedListener() {

			@Override
			public void onItemSelected(AdapterView<?> parent, View view,
					int position, long id) {
				currentPro = position;
				cityAdapter = new ArrayAdapter<City>(MainActivity.this,
						android.R.layout.simple_spinner_item,
						android.R.id.text1, provinces.get(position).getCitys());
				cityAdapter
						.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
				sp_city.setAdapter(cityAdapter);
			}

			@Override
			public void onNothingSelected(AdapterView<?> parent) {
			}
		});

当选择具体的地区时,创建异步类,并把地区名称作为参数。

// 当选择地方时,显示具体的天气情况
		sp_district.setOnItemSelectedListener(new OnItemSelectedListener() {
			@Override
			public void onItemSelected(AdapterView<?> parent, View view,
					int position, long id) {
				// 选择的城市
				District dis = districtAdapter.getItem(position);
				// Log.i("i", dis.getName());
				new WeatherAsyncTask().execute(dis.getName());
			}

			@Override
			public void onNothingSelected(AdapterView<?> parent) {
			}
		});

在异步类的doInBackground方法中,从接口中获取到天气信息,在这儿处理图片我是这么做的,在Weather_data这个类中定义了两个Bitmap类型的属性(这两个属性在解析从接口获取到的天气信息的json字符串时时没有用的),从网络上获取后给这两个属性赋值,然后将已经封装好的Weather传递给onPostExecute方法

protected Weather doInBackground(String... params) {
			String url = HttpUtils.getURl(params[0]);
			String jsonStr = HttpUtils.getJsonStr(url);
			Weather weather = HttpUtils.fromJson(jsonStr);
			Result r = weather.getResults().get(0);
			List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
			list = HttpUtils.toListMap(r);
			for(int i = 0;i<3;i++){
				Weather_data w = r.getWeather_data().get(i);
				w.setDayPicture(HttpUtils.getImage(w.getDayPictureUrl()));
				w.setNightPicture(HttpUtils.getImage(w.getNightPictureUrl()));
			}
			return weather;
		}

也可以通过将Weather的具体信息和通过imageUrl获取到的图片存放到一个list<Map<String,Object>>中,然后传递给onPostExecute方法

在这个方法中,UI线程给布局中的各个控件赋值。

在获取资源的过程中,我单独定义了一个工具类,

包含了处理了解析xml文件,解析json字符串和获取image等方法。

在显示时,只是用了从百度接口中获取到的一些属性,并没有用全部。不过大体原理应该如此了。

错误之处,还请看到的人多多见谅并指出。

代码下载:

http://download.csdn.net/detail/worst_hacker/8634955

时间: 2024-10-14 14:59:26

Android简单的天气预报的相关文章

Android学习之天气预报简单版

自己想做一个简单的天气预报,由于能力有限,暂时做个简单的. 大概讲一下自己的开发步骤吧. 第一步:获得可以开发的json数据的及时更新的接口. 通过强大的度娘,我这里使用的json的地址是:http://wthrcdn.etouch.cn/weather_mini?citykey=101010100 第二步:实现各大城市编号的获取 实现方法:网上下载一个包含各大城市的db文件db_weather.db,下载地址:http://pan.baidu.com/s/1hqkxlxM 这个db文件里面包含

阶段一:一个简单的天气预报应用的完整实现过程(一)

“阶段一”是指我第一次系统地学习Android开发.这主要是对我的学习过程作个记录. 在上一篇阶段一:解析JSON中提到,最近在写一个很简单的天气预报应用.即使功能很简单,但我还是想把它做成一个相对完整的应用.这样的话,像以前想到什么就做什么,显然是不行的,很容易就乱了.所以我就琢磨了一下,弄个什么,让自己的思路变得更加清晰,仅此而已. 经过一些思考和总结之后,我觉得可以是这么一个流程: 第一步:想好这个应用要实现什么功能,并罗列出来,然后就开始写代码,实现这些功能 说明:(1)对于这个模型的具

Android简易版天气预报app的实现(改进版)

最近总是有人来和我说我以前写的一个小app无法正常获取数据~Android简易版天气预报app 今天就又运行了下来查找问题,发现或许是接口有限制吧,不能在多台手机使用同个apikey 然后,发现了我写的代码实在乱七八糟,界面也实在不好看,就又重写了一遍,小小地修改了一遍,开发环境改为了Android Studio 最终效果图如下 工程图如下 一.获取地区信息 做这么一个天气预报app,首先就要获取到国内地区列表 (在我的另一篇博客有介绍:向任意网址发起数据请求) 中国天气网开放有天气预报接口,访

android 简单文件操作

1.布局 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orient

Android简单登陆页面

布局: 线性布局+相对布局 日志打印: 利用LogCat和System.out.println打印观察. Onclick事件是采用过的第四种: 在配置文件中给Button添加点击时间 涉及知识: 通过上线文context获得文件的路径和缓存路径,保存文件 布局代码: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.an

Android Spinner(级联 天气预报)

activity_spinner.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_par

WP8.1开发:简单的天气预报应用

今天小梦给大家分享一个简单的天气预报应用源码:调用的是百度API.整个应用都没有什么难点.只是一个简单的网络请求和json数据处理.在WP8.1有小娜的情况下,天气预报应用还有意义吗?我认为还是有点意义的,至少数据更详细,而要想要用户喜欢,必须有比小娜更人性化的提醒和精美的UI.UI必须要精美.当然小梦今天分享的UI很简单.大家可以根据自己的想象去处理UI.之所以分享出来,是分享JSON的数据处理.在WP8.1开发XML读取中央气象城市代码文件中,分享了XML文件和JSON数据解析的方法,不过其

Android简单的分享笔记

http://blog.csdn.net/xyz_lmn/article/details/16856843 采用Intent隐式调用Activity的方法,主要使用Intent.ACTION_SEND和Intent.createChooser(); 调用Android系统的分享接口.系统会过滤手机上的具有分享应用的程序,让用户进行选择.如果没有使用Intent.createChooser()则会取系统默认的用户分享方式,只有未设置的情况下才会弹出让用户进行选择. 1.简单的分享文本 1 Inte

Android简单的handler处理

1 package com.example.androidprojecttest; 2 3 import android.os.Bundle; 4 import android.os.Handler; 5 import android.os.Message; 6 import android.os.Messenger; 7 import android.R.id; 8 import android.app.Activity; 9 import android.content.Intent; 10