Android开发WeatherForecast程序

[b]1,使用Googel API[/b]
[url]http://www.google.com/ig/api?&weather=beijing[/url]

[b]2,使用DOM解析XML[/b]
[code]
String weather = "";
String url = "http://www.google.com/ig/api?&weather=beijing";
DefaultHttpClient client = new DefaultHttpClient();
HttpUriRequest req = new HttpGet(url);
HttpResponse resp = client.execute(req);
HttpEntity ent = resp.getEntity();
InputStream stream = ent.getContent();
DocumentBuilder b = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document d = b.parse(new InputSource(stream));
NodeList n = d.getElementsByTagName("forecast_conditions");
for (int i = 0; i < n.getLength(); i++) {
weather += n.item(i).getChildNodes().item(0).getAttributes().item(0).getNodeValue();
weather += ", ";
weather += (Integer.parseInt(n.item(i).getChildNodes().item(1).getAttributes().item(0).getNodeValue()) - 32) * 5 / 9;
weather += " ~ ";
weather += (Integer.parseInt(n.item(i).getChildNodes()
.item(2).getAttributes().item(0).getNodeValue()) - 32) * 5 / 9;
weather += ", ";
weather += n.item(i).getChildNodes().item(4).getAttributes().item(0).getNodeValue();
weather += "\n";
}
[/code]

[b]3,另起Thread处理Web请求[/b]
[code]
new Thread() {
public void run() {
try {
// ...
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
[/code]

[b]4,使用Handler传递Thread处理结果到UI主Thread[/b]
[code]
h = new Handler() {
public void handleMessage(Message msg) {
tv.setText((String)msg.obj);
}
};

new Thread() {
// ...
Message msg = h.obtainMessage(1, 1, 1, weather);
h.sendMessage(msg);
}
[/code]

[b]5,完整代码[/b]
[code]
package com.hideto.weatherforecast;

import java.io.InputStream;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.impl.client.DefaultHttpClient;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.TextView;

public class WeatherForecast extends Activity {

public TextView tv;
public Handler h;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
tv = new TextView(this);
tv.setText("Loading...");
setContentView(tv);
h = new Handler() {
public void handleMessage(Message msg) {
tv.setText((String)msg.obj);
}
};
new Thread() {
public void run() {
try {
String weather = "";
String url = "http://www.google.com/ig/api?&weather=beijing";
DefaultHttpClient client = new DefaultHttpClient();
HttpUriRequest req = new HttpGet(url);
HttpResponse resp = client.execute(req);
HttpEntity ent = resp.getEntity();
InputStream stream = ent.getContent();
DocumentBuilder b = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document d = b.parse(new InputSource(stream));
NodeList n = d.getElementsByTagName("forecast_conditions");
for (int i = 0; i < n.getLength(); i++) {
weather += n.item(i).getChildNodes().item(0)
.getAttributes().item(0).getNodeValue();
weather += ", ";
weather += (Integer.parseInt(n.item(i).getChildNodes()
.item(1).getAttributes().item(0).getNodeValue()) - 32) * 5 / 9;
weather += " ~ ";
weather += (Integer.parseInt(n.item(i).getChildNodes()
.item(2).getAttributes().item(0).getNodeValue()) - 32) * 5 / 9;
weather += ", ";
weather += n.item(i).getChildNodes().item(4)
.getAttributes().item(0).getNodeValue();
weather += "\n";
}
Message msg = h.obtainMessage(1, 1, 1, weather);
h.sendMessage(msg);
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
}
}
[/code]

[b]6,修改AndroidManifest.xml加上INTERNET访问权限[/b]
[code]
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.hideto.weatherforecast"
android:versionCode="1"
android:versionName="1.0.0">
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".WeatherForecast"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
[/code]
WeatherForecast:android应用程序,将显示给定城市的天气详细信息 天气预报 android 应用程序,将显示给定城市的天气详细信息。 ** 多个城市 ** 从 bin/ 安装 apk 输入城市名称(或城市使用逗号“,”运算符作为分隔符)。 然后它将在 listView 中加载数据。 只需单击列表视图中的任何城市名称即可查看有关该城市的天气详细信息。 选择城市后,您将获得 14 天的基本天气信息 要获取更多详细信息,只需单击特定日期,您将看到有关该日期的所有信息。 数据显示在视图寻呼机中,因此您可以使用向左或向右滑动来获取有关第二天的信息。 ** 用户当前所在城市 ** 从 bin/ 安装 apk 在右上角单击选项图标,然后单击“获取当前城市天气”。 如果未启用 GPS,则会显示 AlertDialog。 获取用户位置后,它将加载有关该城市的天气数据 然后您将在 listView 中看到您当前城市的名称。 单击城市名称以查看天气详 立即下载

相关推荐

天气预报(WeatherForecast)

这是手机版天气预报,提供最近四天的天气,支持中文查询,不同天气配以不同图片,画面干净整洁,功能简练实用。代码易懂,适合学习者分析学习。可以设置我的城市,并进行保存,还可以设置为默认,天气情况提供湿度,风力,风速等...

Android制作天气预报软件 —— 天气查询

代码中实现的是AsyncTask中的onPreExecute()、doInBackground()两个函数,此外,还定义了openConnection()函数。天气情况的显示除了文字方式,设计中还添加了图片方式。该项使用的是极速数据的天气预报接口,利用接口获取指定地区当天信息(设计中显示的是日期、当前温度、最高温、最低温、城市名、星期、风向、天气、更新时间)以及未来四天天气相关情况(设计中显示的是日期、最高温、最低温、天气),之后将获取信息传递给界面进行显示,不同的天气界面会通过变化图标进行表示。

weixin_58963766的博客 2485

Android WeatherForecast应用源码.zip

这是一款基于Android中有关WeatherForecast的小程序,界面比较简单。希望大家喜欢的可以看看,继续优化一下,希望大家能够从中学习到更多的东西,对大家有所帮助。  

2024年安卓最全Android开发WeatherForecast程序,2024华为Android面试真题

Android学习PDF+架构视频+源码笔记高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料这几块的内容。非常适合近期有面试和想在技术道路上继续精进的朋友。网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。需要这份系统化学习资料的朋友,可以戳这里获取一个人可以走的很快,但一群人才能走的更远!

FZBH_Q的博客 380

weatherForecast_天气_

是一款天气预报的安卓app,通过网络接口获取天气数据,并进行显示

afe模拟前端的重要性_高性能模拟前端信号链解决方案如何助力医疗超声系统发展...

1942年,奥地利TDussik使用A型超声成像系统穿透性探测颅脑,并于1949年获得头部的超声图像,此举昭示超声系统进入到医疗领域。直到如今,超声系统作为用于人体内部的无创可视化技术,被广泛用于医疗领域。最近一份报告称到2022年,中国医疗超声诊断仪器行业的市场规模预计将达到15.8亿美元,保持6%左右的年均增长率。高性能模拟信号链前端是超声设备的关键组成部分,作为高性能模拟技术主要的提供商AD...

weixin_28799111的博客 1088

CodeVisualizer 9大主题与全部设置项清单:定制你的理想流程图外观

CodeVisualizer 是一款 VS Code 代码可视化插件,能把任意函数一键转换成**交互式流程图**,也支持生成整个代码库的**依赖关系图**。对新手而言,最直观的定制方式就是调整它的**流程图外观**——本文带你一次性看完 CodeVisualizer 的 **9 大主题**和**全部设置项**,轻松定制出最顺眼的流程图配色与行为。 [![CodeVisualizer VS Cod

gitblog_00994的博客 246

1.5元主控搞定高精度电流电压采集?STC8G1K08+INA180A3硬件设计全解析

本文详细解析了如何利用成本仅1.5元的STC8G1K08单片机与INA180A3电流检测放大器,构建一套高精度、低成本的电流电压采集系统。文章深入剖析了硬件设计精髓,包括利用MCU内部上拉电阻直驱数码管以节省成本、INA180A3的配置与计算,以及实现高频率采集并与上位机高速通信的软件策略,为嵌入式开发中的极致性价比设计提供了完整方案。

weixin_29166013的博客 600

android报错android.view.ViewRootImpl$CalledFromWrongThreadException

操作UI时报错,先贴上完整的异常信息栈。简单翻译一下就是,线程调用异常:只有创建了视图层级的原始线程才可以修改这个视图 android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. ...

lujx_1024的博客 1万+

不懂就学之挑战成为WorldQuant Brain顾问的第1天

WorldQuant Brain 是由 WorldQuant 公司开发的一个基于人工智能和机器学习的量化研究平台,旨在帮助量化研究员发现和构建有效的投资策略。WorldQuant 是一家全球领先的量化投资公司,专注于利用数据科学、技术和金融工程开发量化交易策略。

Yanbang1的博客 8384

UR机械臂正逆运动学解析:从DH参数到8组解的完整求解策略

本文深入解析UR机械臂的正逆运动学求解策略,从DH参数原理到完整的8组解求解方法。详细介绍了正运动学的坐标变换过程,以及逆运动学中Atan2函数和三角恒等变换的应用,并揭示了8组解的产生机制。通过实际案例和调试技巧,帮助工程师掌握UR机械臂运动学求解的核心技术。

weixin_29094775的博客 413
上一篇: G1入门
下一篇: HPM Note1,Book Organization
hidetobj
博客等级 码龄19年 16粉丝 301原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值