• android 通过Google Weather Api 获取天气预报


    获取天气的链接地址

    根据经纬度获取:http://www.google.com/ig/api?weather=,,,31174165,121433841

    【如中山的经纬度是:22.516997123628076,113.39263916015625 必须都乘以1000000才能作为参数】

    int a=(int)22.516997123628076*1000000;
    int b=(int)113.39263916015625*1000000;
    String strUrl
    ="http://www.google.com/ig/api?hl=zh-cn&weather=,,,"+a+","+b;
    System.out.println(strUrl);

    根据地名获取:http://www.google.com/ig/api?hl=zh-cn&weather=Beijing


    String strData
    = "";
    String strUrl
    = "http://www.google.com/ig/api?hl=zh-cn&weather=ZhongShan";

    strData
    = getResponse(strUrl);

    // 天气预报的xml存储在sd卡中
    new FileUnit().write(strData, "weather.xml");

    // SAX解析xml
    try {
    SAXParserFactory spf
    = SAXParserFactory.newInstance();
    SAXParser sp
    = spf.newSAXParser();
    SAXReader saxReader
    = new SAXReader();

    InputSource is
    = new InputSource();
    is.setByteStream(
    new ByteArrayInputStream(strData.getBytes()));
    sp.parse(is, saxReader);

    weatherList
    =saxReader.getWeathList();


    }
    catch (Exception e) {
    e.printStackTrace();
    }

    //显示天气预报
    showWeather();

    根据地址 获得xml的String

       protected String getResponse(String queryURL) {
    URL url;
    try {
    url
    = new URL(queryURL.replace(" ", "%20"));
    URLConnection urlconn
    = url.openConnection();
    urlconn.connect();

    InputStream is
    = urlconn.getInputStream();
    BufferedInputStream bis
    = new BufferedInputStream(is);

    ByteArrayBuffer buf
    = new ByteArrayBuffer(50);

    int read_data = -1;
    while ((read_data = bis.read()) != -1) {
    buf.append(read_data);
    }
    // String resp = buf.toString();
    String resp = EncodingUtils.getString(buf.toByteArray(), "GBK");
    return resp;
    }
    catch (MalformedURLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    return "";
    }
    catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    return "";
    }
    }

    显示天气

    private void showWeather(){
    List
    <String> weather=null;
    String strTemp
    ="";
    for(int i=0; i<weatherList.size();i++)
    {
    weather
    =weatherList.get(i);
    strTemp
    +="\n==========================\n";
    for(int j=0;j<weather.size();j++)
    {
    strTemp
    +=weather.get(j)+"\n";
    }

    }
    tvShow.setText(strTemp);
    }

    SAXReader:

    View Code
    package com.ReadOrder;

    import java.util.ArrayList;
    import java.util.List;

    import org.xml.sax.Attributes;
    import org.xml.sax.SAXException;
    import org.xml.sax.helpers.DefaultHandler;

    public class SAXReader extends DefaultHandler {

    private final String FORECASE_INFORMATION= "forecast_information";
    private final String CURRENT_CONDITIONS="current_conditions";
    private final String FORECAST_CONDITIONS="forecast_conditions";

    private List<List<String>> weatherList = null;
    private List<String> weather = null;

    private static String tagname = "";

    @Override
    public void startDocument() throws SAXException {
    weatherList
    = new ArrayList<List<String>>();
    }

    @Override
    public void startElement(String uri, String localName, String qName,
    Attributes attributes)
    throws SAXException {
    if (localName.equals(FORECASE_INFORMATION)
    ||localName.equals(CURRENT_CONDITIONS)
    ||localName.equals(FORECAST_CONDITIONS)) {

    tagname
    = "current_conditions";
    weather
    = new ArrayList<String>();
    }
    else {
    if (tagname.equals(CURRENT_CONDITIONS)&& attributes.getValue("data") != null) {

    weather.add (attributes.getValue(
    "data"));
    System.out.println(
    "###" + attributes.getValue("data"));
    }
    }
    }

    @Override
    public void endElement(String uri, String localName, String qName)
    throws SAXException {

    if (localName.equals(FORECASE_INFORMATION)
    ||localName.equals(CURRENT_CONDITIONS)
    ||localName.equals(FORECAST_CONDITIONS)) {

    weatherList.add(weather);
    weather
    =null;
    tagname
    ="";
    }
    }

    @Override
    public void endDocument() throws SAXException {

    }

    public List<List<String>> getWeathList() {
    if(weatherList==null||weatherList.size()<1)
    {
    return null;
    }
    else {
    for(int i=0;i<weatherList.size();i++)
    {
    System.out.println(weatherList.get(i));
    }
    return weatherList;
    }
    }
    }

    详细代码:

    View Code
    package com.ReadOrder;

    import java.io.BufferedInputStream;
    import java.io.BufferedReader;
    import java.io.ByteArrayInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.net.URLConnection;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;

    import javax.crypto.spec.IvParameterSpec;
    import javax.xml.parsers.ParserConfigurationException;
    import javax.xml.parsers.SAXParser;
    import javax.xml.parsers.SAXParserFactory;

    import org.apache.http.util.ByteArrayBuffer;
    import org.apache.http.util.EncodingUtils;
    import org.w3c.dom.ls.LSException;
    import org.xml.sax.InputSource;
    import org.xml.sax.SAXException;

    import android.R.integer;
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.TextView;

    public class GoogleWeatherActivity extends Activity {

    TextView tvShow;
    List
    <List<String>> weatherList=null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setTitle(
    "获取天气预报");
    setContentView(R.layout.layout_weather);
    tvShow
    = (TextView) findViewById(R.id.TextView001);
    tvShow.setText(
    "None Data");

    findViewById(R.id.btnGetWeather).setOnClickListener(
    new OnClickListener() {
    @Override
    public void onClick(View arg0) {
    System.out.println(
    "btnGetWeather===>onclick");

    String strData
    = "";
    String strUrl
    = "http://www.google.com/ig/api?hl=zh-cn&weather=ZhongShan";

    strData
    = getResponse(strUrl);

    // 天气预报的xml存储在sd卡中
    new FileUnit().write(strData, "weather.xml");

    // SAX解析xml
    try {
    SAXParserFactory spf
    = SAXParserFactory.newInstance();
    SAXParser sp
    = spf.newSAXParser();
    SAXReader saxReader
    = new SAXReader();

    InputSource is
    = new InputSource();
    is.setByteStream(
    new ByteArrayInputStream(strData.getBytes()));
    sp.parse(is, saxReader);

    weatherList
    =saxReader.getWeathList();


    }
    catch (Exception e) {
    e.printStackTrace();
    }

    //显示天气预报
    showWeather();



    }
    });
    }

    private void showWeather(){
    List
    <String> weather=null;
    String strTemp
    ="";
    for(int i=0; i<weatherList.size();i++)
    {
    weather
    =weatherList.get(i);
    strTemp
    +="\n==========================\n";
    for(int j=0;j<weather.size();j++)
    {
    strTemp
    +=weather.get(j)+"\n";
    }

    }
    tvShow.setText(strTemp);
    }

    protected String getResponse(String queryURL) {
    URL url;
    try {
    url
    = new URL(queryURL.replace(" ", "%20"));
    URLConnection urlconn
    = url.openConnection();
    urlconn.connect();

    InputStream is
    = urlconn.getInputStream();
    BufferedInputStream bis
    = new BufferedInputStream(is);

    ByteArrayBuffer buf
    = new ByteArrayBuffer(50);

    int read_data = -1;
    while ((read_data = bis.read()) != -1) {
    buf.append(read_data);
    }
    // String resp = buf.toString();
    String resp = EncodingUtils.getString(buf.toByteArray(), "GBK");
    return resp;
    }
    catch (MalformedURLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    return "";
    }
    catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    return "";
    }
    }
    }

  • 相关阅读:
    bzoj 1367
    codeforces 757F
    bzoj 3600
    比赛环境设置
    线段树合并
    BZOJ2105: 增强型LCP
    BZOJ3156: 防御准备
    BZOJ3252: 攻略
    BZOJ2464: 中山市选[2009]小明的游戏
    Beta Round #9 (酱油杯noi考后欢乐赛)乌鸦喝水
  • 原文地址:https://www.cnblogs.com/xiaobuild/p/2160809.html
Copyright © 2020-2023  润新知