首先,我的app需要通过网络来获取当前所在的位置。这里我找到了一个json来获取本地位置信息。

http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js    //获得当前网络所在城市

返回来的信息是:

var remote_ip_info = {"ret":1,"start":-1,"end":-1,"country":"\u4e2d\u56fd","province":"\u6cb3\u5357","city":"\u6d1b\u9633","district":"","isp":"","type":"","desc":""};

返回信息中的汉字编码是gbk,这里我们需要转一下编码就能直接拿到位置信息。

country 是 国家,province 是 省份,city 是所在的城市。这里我就可以通过网络来获取我当前所在的位置信息。

在网上查了一下,查询天气预报都是通过查询服务器上的json来获取天气信息。

http://wthrcdn.etouch.cn/WeatherApi?city=北京        //获得北京近几天的天气情况

http://www.weather.com.cn/data/cityinfo/101010100.html  //101010100北京的气象ID

这是贴除了两个网址,第一个返回是xml格式,需要通过xml解析。第一个返回的信息较全,但是第二个好像也有较全的信息,但是我通过网上的链接一直是返回失败。

第一个有一个缺点,就是没有当天的天气状态(晴、多云、雨等),但是对预报来说却有。

第二个温度信息不怎么准。没有弄明白是怎么回事。

获取json需要通过http协议,这里贴上我用到到的代码:(传入json地址,直接返回字符串)

package com.lmissw.mydesignedapp;

import com.lmissw.mydesignedapp.MainActivity;
import android.util.Log;
import android.widget.Toast; import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL; /**
* Created by ZhouWangsheng on 2018/1/9.
*/ public class httpGetString { private static String urlString = null;
private static String httpUrl = null; private InputStream outStream = null;
private static String outString = null; public static String getString( String urlStr )
{
if(urlStr==null)
return null;
urlString=urlStr;
outString = null;
Thread httpThread = new Thread(new Runnable() {
@Override
public void run() {
HttpURLConnection connection = null;
try {
URL url = new URL(urlString);
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("Charset", "UTF-8"); // 设置字符集
connection.setConnectTimeout(8000);
connection.setReadTimeout(8000);
int code = connection.getResponseCode(); if (code == 200) {
InputStream outStream = connection.getInputStream();
int fileLength = connection.getContentLength(); BufferedReader reader = new BufferedReader(new InputStreamReader(outStream));
StringBuilder jsonText = new StringBuilder();
String line = null;
try {
while ((line = reader.readLine()) != null) {
jsonText.append(line + "/n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
outStream.close();
} catch (IOException e) {
e.printStackTrace();
}
outString = jsonText.toString();
}
Log.i("Infor", "请求成功 "+fileLength);
} else {
Log.i("Infor", "请求失败");
}
} catch (ProtocolException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (connection != null) {
connection.disconnect();
Log.i("Infor", "disconnect ok");
}
}
}
});
httpThread.start();
while(httpThread.isAlive());
Log.i("Infor", "httpData:"+outString);
return outString;
}
}

  

下面是解析天气信息的json:

private void  analysisJsonWeather( String jsonString )
{
try {
JSONTokener jsonParser = new JSONTokener( jsonString );
JSONObject json = (JSONObject)jsonParser.nextValue(); JSONObject jsonWeather = json.getJSONObject("weatherinfo");
String str = jsonWeather.getString("city");
if(str.equals(localCity)==false)
{
return;
}
str = jsonWeather.getString("temp1");
// today.temperMin= Integer.parseInt(str.replaceAll("[^-+.\\d]", ""));
str = jsonWeather.getString("temp2");
// today.temperMax= Integer.parseInt(str.replaceAll("[^-+.\\d]", ""));
// Log.i("Infor", "max min:"+today.temperMax+" "+today.temperMin); today.type = jsonWeather.getString("weather");
// Log.i("Infor", "type:"+today.type); } catch (JSONException e) {
e.printStackTrace();
}
}

  

最后附上解析xml的代码:

   //通过网络获取天气信息的xml文件
String xmlText = httpGetString.getString(httpWeather+localCity); if(xmlText==null)
return false;
String str=" ";
ByteArrayInputStream stream = new ByteArrayInputStream(xmlText.getBytes());
try {
XmlPullParserFactory pullFactory=XmlPullParserFactory.newInstance();
XmlPullParser pullParser=pullFactory.newPullParser();
pullParser.setInput(stream,"UTF-8");
int entype=pullParser.getEventType(); while (entype!=XmlPullParser.END_DOCUMENT) {
String startTag=null;
String textData=null;
switch(entype) {
case XmlPullParser.START_DOCUMENT: break;
case XmlPullParser.START_TAG:
String name = pullParser.getName();
if (name.equalsIgnoreCase("city")) {
String xmlCity = pullParser.nextText();
if (xmlCity.equalsIgnoreCase(localCity) == false) // 如果后面是Text元素,即返回它的值
{
Log.i("Infor", "获取城市天气出错,当前获取的城市是:" + xmlCity);
return false;
}
} else if (name.equalsIgnoreCase("wendu")) {
today.temper = Integer.parseInt(pullParser.nextText());
} else if (name.equalsIgnoreCase("shidu")) {
/* 删除非数字部分 */
String num = pullParser.nextText().replaceAll("[^-+.\\d]", "");
today.humidity = Integer.parseInt(num); } else if (name.equalsIgnoreCase("fengxiang")) {
today.windDir = pullParser.nextText();
} else if (name.equalsIgnoreCase("updatetime")){
today.updateTime = pullParser.nextText();
}else if (name.equalsIgnoreCase("yesterday")) { int begin = xmlText.toString().indexOf('!');
String fengliString = xmlText.substring(begin+6,begin+16);
begin = fengliString.toString().indexOf('[');
int end = fengliString.toString().indexOf(']');
today.windpower = fengliString.substring(begin+1,end);
Log.i("Infor", "风力:" + today.windpower);
return true;
}
break;
case XmlPullParser.END_DOCUMENT: break;
case XmlPullParser.END_TAG: pullParser.getName(); break;
}
entype=pullParser.next();
} } catch (Exception e) {
e.printStackTrace();
} try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
} Log.i("Infor", "获得当前位置:"+str);

  

GraduateDesign-给APP添加获取位置信息和天气预报的功能(json)的更多相关文章

  1. Android获取位置信息的方法总结

    1.位置服务的简介:位置服务,英文翻译为Location-Based Services,缩写为LBS,又称为定位服务或基于位置的服务,融合了GPS定位.移动通信.导航等多种技术,提供与空间位置相关的综 ...

  2. Android 使用GPS获取到经纬度后 无法在Android8.0上使用Geocoder类获取位置信息

    由于我的应用在获取到经纬度后在Android8.0不能使用如下代码获取位置信息.只好使用百度地图 WEB服务API 通过调接口的方式获取位置信息. Geocoder geocoder = new Ge ...

  3. Android 集成GoogleMap,实现定位和获取位置信息

    1.准备 我使用的是AS2.2.2,首先FQ注册google开发者帐号,准备获取API Key,网上有许多相关资料我就不再赘述,这里讲一个比较小白级的获取方法,可以减少许多输入 1.1. AS创建项目 ...

  4. iOS利用HealthKit框架从健康app中获取步数信息

    微信和QQ的每日步数最近十分火爆,我就想为自己写的项目中添加一个显示每日步数的功能,上网一搜好像并有相关的详细资料,自己动手丰衣足食. 统计步数信息并不需要我们自己去实现,iOS自带的健康app已经为 ...

  5. Android GPS应用:动态获取位置信息

    在上文中,介绍了GPS概念及Android开发GPS应用涉及到的常用类和方法.在本文中,开发一个小应用,实时获取定位信息,包括用户所在的纬度.经度.高度.方向.移动速度等.代码如下: Activity ...

  6. jq选择器(jq 与 js 互相转换),jq操作css样式 / 文本内容, jq操作类名,jq操作全局属性,jq获取盒子信息,jq获取位置信息

    jq选择器(jq 与 js 互相转换) // 获取所有的页面元素jq对象 $('css3选择器语法'); var $box = $(".box:nth-child(1)"); 获取 ...

  7. html5获取位置信息,h5获取位置信息

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  8. iOS从健康app中获取步数信息

    统计步数信息并不需要我们自己去实现,iOS自带的健康app已经为我们统计好了步数数据 我们只要使用HealthKit框架从健康app中获取这个数据信息就可以了 1.如下图所示 在Xcode中打开Hea ...

  9. JS 判断浏览器类型,获取位置信息,让手机震动

    判断是否是安卓 var isAndroid = /Android/i.test(navigator.userAgent); 判断是否是IOS系统 var isIOS = /iPhone|iPad|iP ...

随机推荐

  1. Spring Boot 2.4.0 发布,配置文件重大调整,不要乱升级!!

    前段时间 Spring Boot 2.4.0 发布了,栈长作了一个新特性全盘解读,其中介绍了一个很重要的变革,那就是配置文件. 配置文件可是每个框架的核心,不得不搞清楚,所以,这篇栈长就带大家深入实战 ...

  2. 最新小样本学习综述 A Survey on Few-Shot Learning | 四大模型Multitask Learning、Embedding Learning、External Memory…

    目录 原文链接: 小样本学习与智能前沿 01 Multitask Learning 01.1 Parameter Sharing 01.2 Parameter Tying. 02 Embedding ...

  3. CenOS下载离线依赖包神器--yumdownloader

    Blog:博客园 个人 本文只总结一些常用的用法,更详细的说明见man yumdownloader和 info yumdownloader. 概述 有时候所在服务器环境不能访问外网,yum安装会感到非 ...

  4. 【2014广州市选day1】JZOJ2020年9月12日提高B组T3 消除游戏

    [2014广州市选day1]JZOJ2020年9月12日提高B组T3 消除游戏 题目 Description 相信大家玩过很多网络上的消除类型的游戏,一般来说就是在一个大拼图内找出相同的部分进行最大程 ...

  5. Centos7安装Kubernetes k8s v1.16.0 国内环境

    一. 为什么是k8s v1.16.0? 最新版的v1.16.2试过了,一直无法安装完成,安装到kubeadm init那一步执行后,报了很多错,如:node xxx not found等.centos ...

  6. C#数据结构-二叉树-顺序存储结构

    什么是二叉树:每个树的节点只有两个子树的树形结构. 为什么使用顺序存储结构:使用数组存放满二叉树的各结点非常方便,可以根据一个结点的索引号很容易地推算出它的双亲.孩子.兄弟等结点的编号,从而对这些结点 ...

  7. url的组成结构信息

    http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name 从上面的URL可以看出,一个完整的 ...

  8. windows下使用pyinstaller将多个目录的Python文件打包成exe可执行文件

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 一.引言 需要将一个工程涉及两个目录的模块文件打包成exe,打包环境如 ...

  9. Python正则表达式re.findall一个有趣的现象

    下面通过几个案例来分析一下, 注意:本节的parsematch函数请参考<妙用re.sub分析正则表达式解析匹配过程> 案例一: >>> re.findall(r&quo ...

  10. PyQt(Python+Qt)学习随笔:Qt Designer中部件的toolTip、toolTipDuration、statusTip、whatsThis属性

    toolTip属性 toolTip属性设置部件的toolTip提示信息,toolTip提示信息在鼠标放到控件上会浮动出一个小框显示提示信息.默认情况下,仅显示活动窗口子部件的toolTip,可以通过在 ...