天气预报信息获取是利用json获取的,网上有非常多资源,源码。因为上面涉及到非常多天气信息,包含湿度,出行建议等,以及加入了全部城市代码的资源包。为了练手了解json的原理。我仅获取诚笃城市的最高温,最低温,城市名字。

我的布局是通过一个button获取城市名字,最高温,最低温。main.xnl代码例如以下

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="城市名称:" /> <EditText
android:id="@+id/tx_cityname"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10" >
</EditText> <TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="最高温度:" /> <EditText
android:id="@+id/tx_height"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10" /> <TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="最低温度:" /> <EditText
android:id="@+id/tx_low"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10" />
<Button
android:id="@+id/button_refresh"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="获取实时天气信息" >
</Button>
</LinearLayout>

本project含有2个java文件各自是WheatherLck.java和WheatherInfo.java文件。WheatherLck.java代码例如以下

package com.hiden.weatherdemo;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader; import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
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 org.json.JSONException;
import org.json.JSONObject; import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView; public class WeatherLck extends Activity { // 创建三个全局的文本框对象
EditText TX_CITYNAME,TX_HEIGHT,TX_LOW;
private String city_str="成都";
Button button_refresh; @Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.main); // 获取布局中的文本框
TX_CITYNAME=(EditText)this.findViewById(R.id.tx_cityname);
TX_CITYNAME.setText(city_str);
TX_HEIGHT=(EditText)this.findViewById(R.id.tx_height);
TX_LOW=(EditText)this.findViewById(R.id.tx_low); button_refresh=(Button)findViewById(R.id.button_refresh); button_refresh.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(v==button_refresh){
refresh(city_str);
} }
}); /**************************************************************************************
* 获取http://m.weather.com.cn/data/101091106.html上面的数据
* 当中101091106为城市代码,上面我已经把城市代码做了改动,去除了空行,格式为UTF-8
* 每次仅仅是执行一次线程,然后增加主线程回收
* @param city_str
* @throws JSONException
* @throws Exception
* @throws ClientProtocolException
*/
private Thread thread;
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg){
switch(msg.what){
case 1:
JSONObject weather = (JSONObject) msg.obj;
refreshUI(weather);
try {
thread.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
}
}
};
/************************************************************************
* 在主线程中不能请求网络
* 线程没有while循环仅仅是执行一次,假设有溢出可能不能发送消息
* @param city_str
*/
private void requestWeather(final String city_str){ thread = new Thread(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub String url="http://www.weather.com.cn/data/cityinfo/101270101.html";
HttpClient client = new DefaultHttpClient();
HttpGet httpget = new HttpGet(url);
HttpResponse response;
String sbuf = null;
try {
response = client.execute(httpget);
HttpEntity httpentity = response.getEntity();
if(httpentity != null){
BufferedReader br = new BufferedReader(new InputStreamReader(httpentity.getContent(),"utf-8"));
sbuf = br.readLine();
}
JSONObject object = new JSONObject(sbuf);
JSONObject data = (JSONObject) object.getJSONObject("weatherinfo");
//Log.i(TAG, data.toString());
Message msg = new Message();
msg.what = 1;
msg.obj = data;
handler.sendMessage(msg); } catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
thread.start(); }
protected void refresh(String city_str)
{
requestWeather(city_str);
}
private void refreshUI(JSONObject jsonobject){ JSONObject jsonData = jsonobject;
try
{ TX_CITYNAME.setText(jsonData.getString("city"));
// 取得高温数据
TX_HEIGHT.setText(jsonData.getString("temp1"));
// 取得低温数据
TX_LOW.setText(jsonData.getString("temp2")); }catch(Exception e){
e.printStackTrace();
} } }

WheatherInfo.java代码例如以下:

package com.hiden.weatherdemo.ui;

public class WeatherInfo {
String city = "";
String temp1 = "";
String temp2 = "";// 椋庡悜 public String getCity() {
return city;
} public void setCity(String city) {
this.city = city;
} @Override
public String toString() {
return "WeatherInfo [city=" + city + ", temp1=" + temp1
+ ", temp2=" + temp2 + "]";
} public String getTemp1() {
return temp1;
} public void setTemp1(String temp) {
this.temp1 = temp;
} public String getTemp2() {
return temp2;
} public void setTemp2(String temp) {
this.temp2 = temp;
} }

点击button,获得到成都的最高温度和最低温度,效果图例如以下:

当然,大家能够依据自己的需求做出更具体的效果图,比方加入未来5天的天气,定位,加入关注城市等功能。网上资源比較多,大家能够多练习练习。

利用json获取天气信息的更多相关文章

  1. PHP Ajax JavaScript Json 实现天气信息获取

    使用第三方服务 间接方式 思路 使用到的服务 实现代码 前端完整代码 总结 要在自己的网站上添加一个天气预报功能,是一个很普通的需求,实现起来也不是很难.今天来介绍几个简单的方法. 使用第三方服务 有 ...

  2. 半吊子学习Swift--天气预报程序-获取天气信息

    昨天申请的彩云天气Api开发者今天上午已审核通过  饭后运动过后就马不停蹄的来测试接口,接口是采用经纬度的方式来获取天气信息,接口地址如下 https://api.caiyunapp.com/v2/ ...

  3. 内网公告牌获取天气信息解决方案(C# WebForm)

    需求:内网公告牌能够正确显示未来三天的天气信息 本文关键字:C#/WebForm/Web定时任务/Ajax跨域 规划: 1.天定时读取百度接口获取天气信息并存储至Txt文档: 2.示牌开启时请求Web ...

  4. java获取天气信息

    通过天气信息接口获取天气信息,首先要给项目导入程序所需要的包,具体需要如下几个包: json-lib-2.4.jar ezmorph-1.0.6.jar commons-beanutils-1.8.3 ...

  5. Kettle通过Webservice获取天气信息

      Kettle通过Webservice获取天气信息 需求: 通过kettle工具,通过webservice获取天气信息,写成xml格式文件. 思路: Kettle可通过两种选择获取webservic ...

  6. ajax无刷新获取天气信息

    浏览器由于安全方面的问题,禁止ajax跨域请求其他网站的数据,但是可以再本地的服务器上获取其他服务器的信息,在通过ajax请求本地服务来实现: <?php header("conten ...

  7. Android实现自动定位城市并获取天气信息

    定位实现代码: <span style="font-size:14px;">import java.io.IOException; import java.util.L ...

  8. ESP32 IDF 获取天气信息

    一.注册天气获取账号 我使用的知心天气,没有获取天气账号的小伙伴可以去注册一下,知心天气官网:https://www.seniverse.com/ 取得天气获取的API后,可以直接在浏览器中访问测试一 ...

  9. C#调用WebService获取天气信息

    概述 本文使用C#开发Winform应用程序,通过调用<WebXml/>(URL:http://www.webxml.com.cn)的WebService服务WeatherWS来获取天气预 ...

随机推荐

  1. Unicode编码(转)

    随着计算机的发展.普及,世界各国为了适应本国的语言和字符都会自己设计一套自己的编码风格,正是由于这种乱,导致存在很多种编码方式,以至于同一个二进制数字可能会被解释成不同的符号.为了解决这种不兼容的问题 ...

  2. HDU 2328 POJ 3450 KMP

    题目链接:  HDU http://acm.hdu.edu.cn/showproblem.php?pid=2328 POJhttp://poj.org/problem?id=3450 #include ...

  3. 二维码闪电登录流程详解,附demo(1/2)

    二维码,最早发明于日本,它是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设 ...

  4. Codeforces 56D Changing a String 编辑距离 记忆dp

    主题链接:点击打开链接 编辑距离.,== 一边dp虽然录制前体累,,依然是dp #include<iostream> #include<cstdio> #include< ...

  5. [置顶] NS2中TCP拥塞控制仿真过程中盲点解析

    最近利用NS2做TCP拥塞控制协议的仿真,发现很多变量的方法含义都是解释的不清楚,给核心模块修改带来很多麻烦,所以决定用最准确的语言解释成员变量.方法,术语等的含义.限于个人水平,若有错误请留言指正! ...

  6. Moss、SharePoint数据库迁移问题(转)

    当项目快做完时,大家都要考虑将程序及数据迁移到正式环境部署.但是,如果用SharePoint开发,它会产生很多数据库,到底哪些需要迁移,哪些不需要迁移了?? 请看: 1.配置完成SharePoint后 ...

  7. linux环境 :Linux 共享库LIBRARY_PATH, LD_LIBRARY_PATH 与ld.so.conf

    参考: 1. Linux 共享库:LD_LIBRARY_PATH 与ld.so.conf Linux环境变量名,该环境变量主要用于指定查找共享库(动态链接库)时除了默认路径之外的其他路径.(该路径在默 ...

  8. 实战ajax

    原文:实战ajax 实战ajax Ajax的原理简单来说通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据,然后用javascript来操作DOM而更新页面. 大家都知道aja ...

  9. 14.10.3 InnoDB Checkpoints InnoDB 检查点:

    14.10.3 InnoDB Checkpoints InnoDB 检查点: 你的log files 变的很大可能会降低磁盘性能在checkpointing的时候, 它通常设置设置log files总 ...

  10. DRP分销系统总结

    上个月看完的分销系统的视频,用了漫长的时间看这个项目视频,能安慰自己的是不光是看视频了,还做了很多自己想做的事情,比如驾照拿下来了,比如参加了一些考试,比如讲了一些课程等等.把这个系统的总结总算是补上 ...