“网络获取经纬度-->获取所在城市名-->获取该城市天气”一条龙搞定

和风天气API实战:5分钟搞定Python实时天气查询(附完整代码) 本文详细介绍了如何使用Python快速集成和风天气API,实现实时天气查询功能。通过简洁的代码示例和实战案例,帮助开发者5分钟内完成API调用,获取精准天气数据,适用于物联网、数据分析等多种应用场景。 阅读详情

要用到jackson json相关jar包,请自行下载,我已经上传到csdn,免费,需要的可以下载:

http://download.youkuaiyun.com/detail/ithouse/8787725

还要用到xUtils相关jar包(可选,由于根据城市名获取天气的方法要用到几个参数和设定返回编码,我直接用xUtils来完成了。),我也上传到了csdn,免费,需要的可以下载:

http://download.youkuaiyun.com/detail/ithouse/8787713

清单文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.itant.mycity"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="19"
        android:targetSdkVersion="19" />

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            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>

布局文件:

<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.itant.mycity.MainActivity" >

    <TextView
        android:id="@+id/textview1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

</RelativeLayout>

代码:

package com.itant.mycity;

import java.io.IOException;

import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;

import android.app.Activity;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.widget.TextView;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.lidroid.xutils.HttpUtils;
import com.lidroid.xutils.http.RequestParams;
import com.lidroid.xutils.http.ResponseStream;
import com.lidroid.xutils.http.client.HttpRequest.HttpMethod;

public class MainActivity extends Activity implements LocationListener {
    protected LocationManager locationManager;
    private TextView tv_city;
    private HttpUtils utf8Client;
    private String city;
    private String temperature;

    // 维度,经度
    private String URL_GET_CITY = "http://api.map.baidu.com/geocoder/v2/?ak=pmCgmADsAsD9rEXkqWNcTzjd&location=%s&output=json&pois=1";

    private Handler mHandler = new Handler(new Handler.Callback() {

        @Override
        public boolean handleMessage(Message msg) {
            // TODO Auto-generated method stub

            tv_city.setText("您所在的城市是:" + city + "  当天温度:" + temperature);
            return true;
        }
    });

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv_city = (TextView) findViewById(R.id.textview1);
        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        locationManager.requestLocationUpdates(
                LocationManager.NETWORK_PROVIDER, 500, 0, this);
    }

    @Override
    public void onLocationChanged(Location location) {
        // 通过网络获取所在地的经纬度
        URL_GET_CITY = String.format(URL_GET_CITY, location.getLatitude() + "," + location.getLongitude());
        getCityName(URL_GET_CITY);
    }

    @Override
    public void onProviderDisabled(String provider) {
        Log.d("Latitude", "disable");
    }

    @Override
    public void onProviderEnabled(String provider) {
        Log.d("Latitude", "enable");
    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        Log.d("Latitude", "status");
    }

    /**
     * 调用百度的链接,根据维度和经度获取所在城市名
     * @param url
     */
    private void getCityName(final String url) {
        new Thread(new Runnable() {

            @Override
            public void run() {
                // 创建默认的客户端实例
                HttpClient httpCLient = new DefaultHttpClient();
                // 创建get请求实例
                HttpGet httpget = new HttpGet(url);
                try {
                    // 客户端执行get请求 返回响应实体
                    HttpResponse response = httpCLient.execute(httpget);

                    // 服务器响应状态行
                    //System.out.println(response.getStatusLine());

                    Header[] heads = response.getAllHeaders();
                    // 打印所有响应头
                    for (Header h : heads) {
                        System.out.println(h.getName() + ":" + h.getValue());
                    }

                    if (200 == response.getStatusLine().getStatusCode()) {
                        // 获取响应消息实体
                        HttpEntity entity = response.getEntity();

                        System.out.println("------------------------------------");

                        if (entity != null) {
                            ObjectMapper mapper = new ObjectMapper();
                            JsonNode jsonNode;
                            try {
                                jsonNode = mapper.readTree(EntityUtils.toString(entity));
                                city = jsonNode.get("result").get("addressComponent").get("city").textValue();
                                getCityWeather(city);
                            } catch (Exception e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
                        }
                    }

                } catch (ClientProtocolException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                } finally {
                    httpCLient.getConnectionManager().shutdown();
                }
            }
        }).start();
    }

    /**
     * 调用百度的链接,根据城市名获取城市天气
     * @param city
     */
    private void getCityWeather(String city) {
        RequestParams params = new RequestParams();
        params.addQueryStringParameter("location", city);
        params.addQueryStringParameter("ak", "2o5QP4AtEGZGKPz2LXQO2z4I");
        params.addQueryStringParameter("output", "json");
        try {
            if (utf8Client == null) {
                utf8Client = new HttpUtils();   
            }
            // 设置缓存1秒,1秒内直接返回上次成功请求的结果。
            utf8Client.configCurrentHttpCacheExpiry(1000);
            utf8Client.configResponseTextCharset("UTF-8");
            ResponseStream stream = utf8Client.sendSync(HttpMethod.GET, "http://api.map.baidu.com/telematics/v3/weather", params);
            String content = stream.readString();
            try {
                ObjectMapper mapper = new ObjectMapper();
                JsonNode jsonNode = mapper.readTree(content).get("results").get(0);
                //pm25 = jsonNode.get("pm25").textValue();
                temperature = jsonNode.get("weather_data").get(0).get("temperature").textValue();

                mHandler.sendEmptyMessage(0);

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

效果图:
这里写图片描述

和风天气API实战:5步搞定微信小程序自动定位天气预报(附避坑指南) 本文详细介绍了如何利用和风天气API,在微信小程序中实现一个支持自动定位的天气预报功能。从API申请、小程序后台配置,到核心代码实现与数据渲染,提供了完整的实战步骤。文章重点分享了自动定位的流畅体验构建、错误处理与数据降级等关键优化点,并附有常见问题的避坑指南,帮助开发者快速集成稳定可靠的天气模块。 阅读详情

相关推荐

【Python项目实战】项目·桌面天气查询:requests + tkinter + 免费API

之前的项目都在你自己的电脑里转。——输入城市名,拿回真实的实时天气。🎯:一个有窗口的天气查询工具。,两个“第一次”一晚搞定,含注释130行左右。

溪语流沙的博客 321

根据经纬度查询天气

根据经纬度查询天气

weixin_51439775的博客 1224

Python构建天气查询小程序全流程实战

在前后端分离架构中,API接口作为数据交互的桥梁,其设计质量直接影响应用的可维护性与扩展性。Python凭借简洁的语法和丰富的Web框架生态,成为搭建轻量级API服务的理想选择。本文从接口设计、数据清洗到异常处理,系统讲解如何用Flask封装第三方天气数据源,并通过统一JSON结构为小程序端提供稳定服务。同时,针对微信小程序请求域名白名单、HTTPS部署、超时控制等真实场景中的高频问题,给出可落地的解决方案。无论是想练手Python后端,还是为小程序增加服务端能力,都能从中获得可复用的工程思路。

weixin_31742871的博客 215

java实现经纬度查天气_根据经纬度查天气预报

这篇博客是知道某个地方的经纬度,然后想要查询这个地方的天气情况。分析:知道经纬度后,我们首先得查询到这个经纬度所代表的地区位置,然后拿到这个地区位置,再次去查询天气预报。# -*- coding: UTF-8 -*-import requestsimport json#lat = '31.809928'#lng = '102.537467'lng = str(101.361430)lat = st...

weixin_36410077的博客 1594

天气预报接口调用示例源码20121213

天气预报接口调用示例源码 源码描述: 一个天气预报接口调用示例源码 注意: 一、源码用于新手学习交流,默认天气预报城市为义乌天气预报, 如需更改其它城市请修改17行代码: disp_weather("义乌");把义乌替换成别的城市名称就ok。 二、本程序天气预报的接口地址为:http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx, 此接口地址是免费,请务用于商务用途

天气预报数据获取java代码(风和天气、高德地图)

免费获取天气预报数据用于数据分析使用,采用java代码实现获取,直接使用。里面有excel文件是各个地区的编码,可以直接使用风和天气和高德地图两种天气数据。

[一天一项目]获取当前天气——获取某个地区当前的天气情况。

获取当前天气,用的新浪的api获取天气情况,只是读取了天气和温度信息,其他可以自行添加。只是简单的实现了功能 并没有做成web项目,只是做了java。package com.project.Weather; /** * java获取新浪天气预报代码 */ import java.io.FileInputStream; import java.io.FileN

Fance Tsui 2356

Matlab2018a崩溃解决的办法No sandbox or build area path

Matlab 2018a (No sandbox or build area path)出现崩溃后需要使用terminal进行如下操作: cd /home/david/MySoft/MATLAB/R2018a/bin/glnxa64 (你的matlab路径) mkdir exclude mv libfreetype* exclude/ 执行后图片如下: 如果你用的Windows系统,请手动按照上面步骤剔除了dll。 Matlab 2018a (No sandbox or build are

David Xiao 1万+

Java+Swing+sqlserver学生成绩管理系统

Java+Swing+sqlserver学生成绩管理系统一、系统介绍二、系统展示1.登陆2.课程分配3.选课管理4.学生打分--教师4.查询个人成绩--学生三、其他1.其它系统2.获取源码 一、系统介绍 管理员:登陆页面、课程管理、选课管理 老师:给学生打分 学生:查询个人成绩 二、系统展示 1.登陆 2.课程分配 3.选课管理 4.学生打分–教师 4.查询个人成绩–学生 三、其他 1.其它系统 Java+Swing实现学生选课管理系统 Java+Swing实现学校教务管理系统 Java+Swin

qq_33037637的博客 6953

Maven的下载安装配置教程(详细图文)

目录 一、简单了解一下什么是Maven 二、maven的下载 三、maven的安装 四、maven的环境变量配置 五、setting文件配置 六、开发工具配置Maven 一、简单了解一下什么是Maven Maven就是一款帮助程序员构建项目的工具,我们只需要告诉Maven需要哪些Jar 包,它会帮助我们下载所有的Jar,极大提升开发效率。 1.Maven翻译为“专家“, ”内行”的意思,是著名Apache公司下基于Java开发的开源项目。 2.Maven项目对象模型(POM)是一..

bakelFF的博客 12万+

Codex驱动AEDT完成无线充电仿真——从双线圈建模到三维电磁场动画

本文介绍了一个利用Codex、PyAEDT和Ansys Electronics Desktop 2025 R2实现双线圈无线充电系统自动建模与仿真的案例。通过简化模型(平面线圈+铁氧体磁芯),完成了从参数化建模、电磁场求解到后处理的全流程自动化,获得了耦合系数(k=0.17)、三维电磁场分布及多周期动态可视化效果。研究发现:线圈间距对传输效率影响最大(10-30mm间距时效率从40.2%降至5.57%),横向偏移15mm会使效率下降35%,而磁芯厚度增加带来的效率提升有限(3→7mm仅提高1.67%)。该框

sjjsjjsjjsjjsjj的博客 447

java获取当地天气_根据IP获取当地天气预报的实现

==cityname){53 return weaths;54 }55 }56 return "57816";57}5859//获取所在地天气预报结果的链接60function getWeatherUrl(){61if (!NTES_WeatherAddr){62 NTES_WeatherAddr=getCityWeatherID(loc);6364}...

weixin_39627481的博客 440

FastAdmin框架Token验证实战:从登录到API调用的完整流程

本文详细解析了在FastAdmin框架中实现Token验证的完整流程,从数据表设计、登录接口签发Token,到核心验证中间件的编写与路由配置,并探讨了在业务API中的调用与安全实践。内容涵盖Token生成策略、有效期管理及安全增强措施,为开发者提供了一套可落地的API身份验证解决方案。

nnn11的博客 917

Android 和风天气SDK集成实战:从零实现精准天气数据获取与展示

本文详细介绍了在Android应用中集成和风天气SDK的完整实战流程。通过对比SDK与API的优劣,阐述了SDK在简化网络请求、数据解析及功能完整性方面的优势。文章从账号申请、项目配置、核心代码编写到界面设计,逐步指导开发者实现精准的实时天气数据获取与展示,并提供了定位、多城市管理等进阶功能思路与常见避坑指南。

weixin_29271053的博客 344

第95节:多模型多卡推理管理

多模型推理:在同一硬件平台上同时部署多个不同或相同的深度学习模型,满足多任务需求。多卡推理:利用多块 GPU 资源,提升推理吞吐量与并发能力。目标:合理分配 GPU 资源,实现高效、低延迟的推理服务。

yumeiguo的博客 218

实现画布拖拽算子排布,通过flink实现算子编排计算,如何实现?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 1072

告别手动输入!用高德地图AMap.CitySearch插件,5分钟搞定用户IP自动定位城市

本文详细介绍了如何利用高德地图的AMap.CitySearch插件实现用户IP自动定位城市功能,无需手动输入即可在5分钟内完成集成。通过IP定位技术,开发者可以快速获取用户所在城市信息,并结合setBounds方法实现地图自动聚焦,显著提升用户体验。适用于天气应用、本地新闻等需要城市级定位的场景。

weixin_30600197的博客 751

【Matlab】飞行器气动弹性仿真与分析

气动弹性是飞行器设计领域的核心交叉学科,融合了空气动力学、结构动力学和控制理论,主要研究飞行器结构在气动力作用下的弹性变形、振动响应及相互耦合规律,直接影响飞行器的飞行稳定性、操纵性和结构安全性。随着飞行器向高速度、高机动性、轻量化方向发展,气动弹性问题愈发突出,如颤振、发散、嗡鸣等现象,严重时会导致飞行器结构破坏甚至飞行事故,因此气动弹性仿真与分析已成为飞行器设计、验证和优化的关键环节。当前,飞行器气动弹性仿真面临诸多技术挑战:气动力与结构变形的强耦合特性难以精准描述,易出现仿真误差;

unber的博客 233

Android和风天气SDK集成实战:从零构建实时天气应用(附完整代码)

本文详细介绍了在Android应用中集成和风天气SDK的完整实战流程。通过对比SDK与API的优劣,指导开发者从注册账号、获取密钥、项目配置到核心代码编写,快速构建具备实时天气查询功能的应用。文章重点讲解了SDK初始化、数据获取与解析,并提供了自动定位功能实现与常见问题避坑指南,帮助开发者高效完成集成。

weixin_28318011的博客 384

Kappa函数:测量一致性并计算置信区间的R语言包

Kappa函数是一种常用的统计量,用于衡量两个评估者之间的一致性。在R语言中,有一个名为"vcd"的包提供了计算Kappa函数以及相应的置信区间的功能。本文将介绍如何使用"vcd"包来计算Kappa函数的值,并进一步计算置信区间。Kappa函数的值介于-1和1之间,值越接近1表示评估者之间的一致性越高,值越接近-1表示评估者之间的一致性越低,值接近0表示评估者之间的一致性接近于随机。通过以上步骤,我们成功地使用R语言中的"vcd"包计算了Kappa函数的值和置信区间。接下来,我们可以使用"vcd"包中的。

2301_79331230的博客 1875

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Python爬虫获取天气数据并用Pyecharts制作动态轮播图

数据采集与可视化是数据分析链路中不可或缺的两环。通过HTTP请求公开接口获取结构化数据,是Python爬虫应用中最规范、最安全的实践之一;而动态图表则能直观呈现数据随时间的变化趋势。Pyecharts作为ECharts的Python封装,提供了丰富的交互组件,其中Timeline时间轴轮播图能自动播放多张图表,非常适合展示天气、股价等多时点数据。本文以天气数据为例,讲解如何利用requests库请求天气预报API,借助pandas对JSON数据进行清洗与整理,最终使用Pyecharts的Bar+Timeli

weixin_34290096的博客 413

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

别再手动查城市编码了!用高德地图API,5分钟搞定前端天气应用定位难题

本文详细介绍了如何利用高德地图API快速解决前端开发中的城市编码定位难题。通过地理编码和逆地理编码API,开发者可以轻松获取实时、精确的行政区划信息,替代传统的静态JSON方案,大幅提升开发效率和定位精度。文章还提供了React和Vue框架的集成示例,以及性能优化与安全实践。

weixin_31509753的博客 545

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

微信小程序云开发入门实战小案例-天气闹钟

一、前言 最近越来越多的小伙伴加入了微信小程序云开发的阵营。为了让同学们能够快速入门云开发,特意推出了这篇实战博客。希望能够给同学们带来帮助,一起遨游在云开发的乐趣里,成为一个全栈(干)程序员。 二、项目介绍 看标题就知道这篇博客是做一个天气定时提醒的小程序。具体实现的需求很简单: 查询广州市的天气信息。作为入门的案例,我这里只做指定的城市。对于自动定位,获取不同城市的天气信息,作为挑战交同学们自己去实现。欢迎在评论区分享你的战绩或问题。 每天早上8点钟,通过小程序订阅通知发送天气信息给用户。 对于根据用

SuperYang的博客 4200

Flutter for OpenHarmony第三方库综合实战DAY1:天气预报APP

本文介绍了使用Flutter在OpenHarmony上开发天气预报APP的全过程。项目实现了实时天气查询、多日预报、自动定位和动态换肤功能,采用dio、geolocator_ohos和provider三个关键库进行网络请求、定位服务和状态管理。文章详细讲解了环境配置、定位实现、数据请求封装、状态管理方案和UI设计等核心环节,并提供了完整的代码示例。该APP具有轻量稳定、界面美观的特点,支持自动获取位置、下拉刷新等功能。最后还提出了城市搜索、天气预警等扩展方向,展示了Flutter在OpenHarmony平台

yinqingchen11的博客 464

免费天气API接入指南:和风天气开发版详解与Python实战

在个人网站、自动化脚本或智能硬件项目中,天气数据往往是不可或缺的基础能力。开发者通常需要从零理解天气接口的选型原则、数据结构和鉴权方式,而免费且稳定的API服务则能显著降低项目成本。天气API通过结构化JSON返回实况温度、逐日预报、空气质量等字段,其核心原理是基于地理位置编码的接口调用,合理的缓存策略还能有效规避配额限制。这类接口广泛应用于天气卡片展示、环境监测、智能家居联动等场景,具备高复用性和工程落地价值。本文围绕和风天气开发版,从控制台配置、Location参数解析到Python代码调用,完整演示如

weixin_34111790的博客 413

Python+PyQt5打造桌面天气应用:从架构设计到异步加载实战

桌面应用开发中,GUI框架的选型直接影响开发效率与应用体验。PyQt5凭借灵活的布局系统、样式表支持和成熟的信号槽机制,成为Python开发者快速构建跨平台桌面工具的理想选择。在天气类数据应用中,需要理解并实践API请求、缓存策略、异步加载等核心原理,以确保界面流畅且数据可靠。通过接入和风天气API,开发者可以掌握城市搜索、数据模型解耦、多线程通信及暗色主题适配等关键工程技巧。本文从实际项目出发,详细展示从环境搭建、网络层封装、UI组件设计到性能优化的完整路径,适用于希望快速落地桌面小工具的学生与职场人。合

weixin_31986143的博客 132
上一篇: 解决使用了subList方法之后MPAndroidChart不能显示数据的Bug
下一篇: 安卓闹钟相关
ithouse
博客等级 码龄12年 200粉丝 212原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ithouse

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值