package com.lolaage.tool;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.zip.GZIPInputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.apache.http.Header;
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.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.provider.ContactsContract.Data;
import android.text.format.DateFormat;
import android.text.format.DateUtils;
import android.util.Log;
import com.lolaage.entity.WeatherInfo;
import com.lolaage.entity.WeatherNextInfo;
public class WeatherUtil {
private static String USER_AGENT = "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.11) Gecko/20101031 Gentoo Firefox/3.6.11";
/**
* 取得天气信息
* @param url
*/
public static WeatherInfo getWeatherMes(String url){
WeatherInfo weatherInfo = new WeatherInfo();
DefaultHttpClient client = new DefaultHttpClient();
HttpUriRequest request = new HttpGet(url);
//设置请求头(用来解决网络获取数据乱码问题)
request.setHeader("User-Agent",USER_AGENT);
request.setHeader("Accept-Encoding", "gzip,deflate");
HttpResponse response = null;
InputStream inputStream = null;
try {
response = client.execute(request);
HttpEntity entity = response.getEntity();
inputStream = entity.getContent();
//判断返回的请求头(解决乱码)
Header header = response.getFirstHeader("Content-Encoding");
if(header != null && header.getValue().toLowerCase().indexOf("gzip") > -1){
inputStream = new GZIPInputStream(inputStream);
}
//解析
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document document = builder.parse(new InputSource(inputStream));
NodeList nodeList = document.getElementsByTagName("forecast_information");
//取得当天日期
String date = nodeList.item(0).getChildNodes().item(4).getAttributes().item(0).getNodeValue();
NodeList nodeList2 = document.getElementsByTagName("current_conditions");
//取得当天天气、湿度、图片、风速
String condition = nodeList2.item(0).getChildNodes().item(0).getAttributes().item(0).getNodeValue();
String humidity = nodeList2.item(0).getChildNodes().item(3).getAttributes().item(0).getNodeValue();
String icon = nodeList2.item(0).getChildNodes().item(4).getAttributes().item(0).getNodeValue();
String wind = nodeList2.item(0).getChildNodes().item(5).getAttributes().item(0).getNodeValue();
NodeList nodeList3 = document.getElementsByTagName("forecast_conditions");
//取得当天的星期、温度
String week = nodeList3.item(0).getChildNodes().item(0).getAttributes().item(0).getNodeValue();
String low = nodeList3.item(0).getChildNodes().item(1).getAttributes().item(0).getNodeValue();
String high = nodeList3.item(0).getChildNodes().item(2).getAttributes().item(0).getNodeValue();
weatherInfo.date = date;
weatherInfo.condition = condition;
weatherInfo.humidity = humidity;
weatherInfo.icon = icon;
weatherInfo.wind = wind;
weatherInfo.week = week;
weatherInfo.highTemp = high;
weatherInfo.lowTemp = low;
WeatherNextInfo nextInfo;
//取得今后3天的天气情况
for (int i = 1; i < nodeList3.getLength(); i++) {
nextInfo = new WeatherNextInfo();
nextInfo.week = nodeList3.item(i).getChildNodes().item(0).getAttributes().item(0).getNodeValue();
nextInfo.low = nodeList3.item(i).getChildNodes().item(1).getAttributes().item(0).getNodeValue();
nextInfo.high = nodeList3.item(i).getChildNodes().item(2).getAttributes().item(0).getNodeValue();
nextInfo.icon = nodeList3.item(i).getChildNodes().item(3).getAttributes().item(0).getNodeValue();
nextInfo.condition = nodeList3.item(i).getChildNodes().item(4).getAttributes().item(0).getNodeValue();
weatherInfo.nextWeatherList.add(nextInfo);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
if(inputStream != null){
inputStream.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
return weatherInfo;
}
/**
* 日期格式化
* @param str
* @return
* @throws ParseException
*/
public static String dateFormat(String str){
Date date = null;
SimpleDateFormat df = new SimpleDateFormat("yyyy-mm-dd");
if(str != null && !"".equals(str)){
try {
date = df.parse(str);
} catch (ParseException e) {
e.printStackTrace();
}
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年mm月dd日");
return sdf.format(date);
}
/**
*
* @param str
* @return
*/
public static String weekFormat(String str){
String week = "";
if(str != null && !"".equals(str)){
if(str.startsWith("周")){
week = str.replaceFirst("周", "星期");
}
}
return week;
}
/**
* 返回天气图标
* @param iconUrl
* @return
*/
public static Bitmap returnIcon(String iconUrl){
URL imgUrl = null;
Bitmap bp = null;
HttpURLConnection connection = null;
InputStream inputStream = null;
try {
imgUrl = new URL(iconUrl);
connection = (HttpURLConnection) imgUrl.openConnection();
connection.setDoInput(true);
connection.connect();
inputStream = connection.getInputStream();
bp = BitmapFactory.decodeStream(inputStream);
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
if(inputStream != null || connection != null){
inputStream.close();
connection.disconnect();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
return bp;
}
}
分享到:
相关推荐
Android SDK提供了丰富的API来支持XML的读取和写入操作,使得开发者能够方便地处理XML数据。下面我们将深入探讨Android中读写XML的相关知识点。 一、XML解析器 Android中主要有两种类型的XML解析器:DOM解析器和SAX...
在解析过程中,循环调用`parser.next()`获取XML事件。常见的事件包括`START_TAG`、`END_TAG`、`TEXT`等。根据事件类型,执行相应的处理逻辑: ```java int eventType = parser.getEventType(); while (eventType !=...
"android解决乱码"这个主题主要关注如何在Android应用中正确处理和显示文本,以避免出现乱码现象。以下是一些相关的知识点: 1. **字符编码基础**: - Unicode:Unicode是一种国际标准,为所有已知的字符提供了一...
java 读取APK文件 可以读取version等(解决乱码问题) 我们通过纯java来解读APK里面的AndroidManifest.xml文件 这样可以读取versioncode 注意 是用纯java 而不是Android库 test是实例 其中AXMLPrinter2.jar这个要...
通过这个解析器,我们可以获取整个XML文档的树形结构,并通过Node接口操作XML元素。 - **SAX解析器**:适用于处理大型XML文件,因为它按事件流处理,不会一次性加载整个文档到内存,节省资源。 - **Pull解析器**:...
在Android平台上进行二维码开发时,ZXing(Zebra Crossing)是一个非常流行的开源库,它提供了多种条码和二维码的读取与生成功能。本项目针对ZXing进行了优化,特别是解决了中文乱码的问题,使得开发者在处理包含...
在Java中通过ZipFile解析Android apk 压缩文件,获取版本号等信息,获取的manifest文件格式无法识别为xml,导致无法解析,该jar文件用来处理乱码文件,apk压缩文件解压缩乱码问题
那么android设备如何通过蓝牙获取扫描内容的呢? 1. 蓝牙配对,连接设备 打开系统设置,找到蓝牙,打开扫码枪,配对扫码枪设备。输入一个固定的配对码,一般扫码枪说明书里都有写。配对完成后,显示设备已连接。就ok...
"拦截器解决中文乱码问题"这个主题,主要关注的是如何通过使用拦截器(Interceptor)这一技术手段来预防或解决乱码现象。拦截器是Spring MVC框架中的一个重要组件,它可以对HTTP请求进行预处理和后处理,从而在数据...
在Android开发中,获取网页源码是一项常见的任务,它能够帮助开发者分析网页内容、抓取数据或者实现自动化操作。本文将详细介绍如何在Android环境中通过异步处理来获取任意网页的HTML源码。 首先,我们需要引入必要...
XML文件可以被解析以获取其中的数据并进行处理。本篇文章将深入探讨三种在Android中解析XML的方法:DOM(文档对象模型)、Pull(拉取解析器)和SAX(简单API for XML),并且会特别强调如何识别文件编码。 首先,...
- 首先,你需要获取XML文件的输入流,这可以通过`AssetManager`或网络请求实现。 - 创建`XmlPullParser`实例,并设置解析器工厂,如`XmlPullParserFactory`。 - 使用`setInput()`方法传递输入流到解析器。 - ...
在Android中,通常会使用诸如DOM、SAX或StAX这样的解析器来读取和解析XML内容,根据XML结构来获取所需的数据。 总之,将Word文档转换为XML在Android应用中是一项常见的任务,涉及到文件读写、XML处理和网络通信等多...