Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 622|回复: 0

android 通过Google Weather Api 获取天气预报-  Android学习

[复制链接]

该用户从未签到

发表于 2011-10-24 14:46:03 | 显示全部楼层 |阅读模式
获取天气的链接地址
根据经纬度获取: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: 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;            

        }

    }   

    }
复制代码详细代码: 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 "";

        }

    }

}
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2025-1-11 11:59 , Processed in 0.304251 second(s), 36 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表