22天气预报
2016-06-15 17:05
190 查看
Android天气预报
网络数据返回一般是JSON格式,利用网络API实现天气预报功能,API获得网络数据。
http://apistore.baidu.com/astore/serviceinfo/1798.html,网页里有关于API的介绍,可以根据这个学习。
运行实例效果:
下面是代码:
[html] view
plain
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minHeight="30dp"
android:text="天气预报"
android:textSize="26dp" />
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:minHeight="30dp"
android:orientation="horizontal" >
<EditText
android:id="@+id/myedit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1111" />
<Button
android:id="@+id/searchweather"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="查询天气 " />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:minHeight="30dp"
android:orientation="horizontal" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="城市:" />
<TextView
android:id="@+id/city"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:minHeight="30dp"
android:orientation="horizontal" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="天气:" />
<TextView
android:id="@+id/weather"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:minHeight="30dp"
android:orientation="horizontal" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="实时气温:" />
<TextView
android:id="@+id/temp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:minHeight="30dp"
android:orientation="horizontal" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="最低气温:" />
<TextView
android:id="@+id/h_temp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:minHeight="30dp"
android:orientation="horizontal" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="最高气温:" />
<TextView
android:id="@+id/l_temp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1" />
</LinearLayout>
</LinearLayout>
下面连接工具类:
[java] view
plain
package org.lxh.demo;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class HttpDownloader {
private URL url = null;
/**
* 根据URL下载文件,前提是这个文件当中的内容是文本,函数的返回值就是文本当中的内容 1.创建一个URL对象
* 2.通过URL对象,创建一个HttpURLConnection对象 3.得到InputStream 4.从InputStream当中读取数据
*
* @param urlStr
* @return
*/
public String download(String urlStr) {
StringBuffer sb = new StringBuffer();
String line = null;
BufferedReader buffer = null;
try {
url = new URL(urlStr);
HttpURLConnection urlConn = (HttpURLConnection) url
.openConnection();
urlConn.setRequestMethod("GET");
urlConn.setConnectTimeout(8000);
urlConn.setReadTimeout(8000);
buffer = new BufferedReader(new InputStreamReader(
urlConn.getInputStream()));
while ((line = buffer.readLine()) != null) {
sb.append(line);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
buffer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return sb.toString();
}
}
获取返回字符串之后要对此JSON数据进行解析:
[java] view
plain copy
package org.lxh.demo;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.json.JSONObject;
public class Util {
public List<Map<String, Object>> getInformation(String jonString)
throws Exception {
JSONObject jsonObject = new JSONObject(jonString);
JSONObject retData = jsonObject.getJSONObject("retData");
List<Map<String, Object>> all = new ArrayList<Map<String, Object>>();
Map<String, Object> map = new HashMap<String, Object>();
map.put("cityName", retData.optString("city"));
map.put("weather", retData.optString("weather"));
map.put("temp", retData.optString("temp"));
map.put("l_temp", retData.optString("l_tmp"));
map.put("h_temp", retData.optString("h_tmp"));
all.add(map);
return all;
}
}
下面Activity程序:
[java] view
plain copy
package org.lxh.demo;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class Main extends Activity {
private EditText citynameEditText;
private Button searchWeatherButton;
private TextView citynametTextView;
private TextView weahterTextView;
private TextView tempTextView;
private TextView h_tempTextView;
private TextView l_tempTextView;
String jonString;
ProgressDialog progressDialog;
private static final int SET = 1;
@SuppressLint("HandlerLeak")
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case SET:
Util util = new Util();
try {
List<Map<String, Object>> all = util
.getInformation(msg.obj.toString());
Iterator<Map<String, Object>> iterator = all.iterator();
while (iterator.hasNext()) {
Map<String, Object> map = iterator.next();
Log.d("天气", map.get("weather").toString());
citynametTextView.setText(map.get("cityName")
.toString());
weahterTextView.setText(map.get("weather").toString());
tempTextView.setText(map.get("temp").toString());
h_tempTextView.setText(map.get("l_temp").toString());
l_tempTextView.setText(map.get("h_temp").toString());
}
} catch (Exception e) {
e.printStackTrace();
} finally {
}
break;
}
}
};
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); // 生命周期方法
super.setContentView(R.layout.main); // 设置要使用的布局管理器
citynameEditText = (EditText) findViewById(R.id.myedit);
searchWeatherButton = (Button) findViewById(R.id.searchweather);
citynametTextView = (TextView) findViewById(R.id.city);
weahterTextView = (TextView) findViewById(R.id.weather);
tempTextView = (TextView) findViewById(R.id.temp);
h_tempTextView = (TextView) findViewById(R.id.h_temp);
l_tempTextView = (TextView) findViewById(R.id.l_temp);
searchWeatherButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
new Thread(new NewThread()).start();
Log.d("按键", "Success");
}
});
}
private class NewThread implements Runnable {
public void run() {
String address = "http://apistore.baidu.com/microservice/weather?citypinyin="
+ citynameEditText.getText().toString();
HttpDownloader httpDownloader = new HttpDownloader();
String jonString = httpDownloader.download(address);
Message msg = Main.this.handler
.obtainMessage(Main.SET, jonString);
Main.this.handler.sendMessage(msg);
}
}
}
问题:查询是只能输拼音,有事无法区分。
网络数据返回一般是JSON格式,利用网络API实现天气预报功能,API获得网络数据。
http://apistore.baidu.com/astore/serviceinfo/1798.html,网页里有关于API的介绍,可以根据这个学习。
运行实例效果:
下面是代码:
[html] view
plain
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minHeight="30dp"
android:text="天气预报"
android:textSize="26dp" />
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:minHeight="30dp"
android:orientation="horizontal" >
<EditText
android:id="@+id/myedit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1111" />
<Button
android:id="@+id/searchweather"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="查询天气 " />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:minHeight="30dp"
android:orientation="horizontal" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="城市:" />
<TextView
android:id="@+id/city"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:minHeight="30dp"
android:orientation="horizontal" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="天气:" />
<TextView
android:id="@+id/weather"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:minHeight="30dp"
android:orientation="horizontal" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="实时气温:" />
<TextView
android:id="@+id/temp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:minHeight="30dp"
android:orientation="horizontal" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="最低气温:" />
<TextView
android:id="@+id/h_temp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:minHeight="30dp"
android:orientation="horizontal" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="最高气温:" />
<TextView
android:id="@+id/l_temp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1" />
</LinearLayout>
</LinearLayout>
下面连接工具类:
[java] view
plain
package org.lxh.demo;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class HttpDownloader {
private URL url = null;
/**
* 根据URL下载文件,前提是这个文件当中的内容是文本,函数的返回值就是文本当中的内容 1.创建一个URL对象
* 2.通过URL对象,创建一个HttpURLConnection对象 3.得到InputStream 4.从InputStream当中读取数据
*
* @param urlStr
* @return
*/
public String download(String urlStr) {
StringBuffer sb = new StringBuffer();
String line = null;
BufferedReader buffer = null;
try {
url = new URL(urlStr);
HttpURLConnection urlConn = (HttpURLConnection) url
.openConnection();
urlConn.setRequestMethod("GET");
urlConn.setConnectTimeout(8000);
urlConn.setReadTimeout(8000);
buffer = new BufferedReader(new InputStreamReader(
urlConn.getInputStream()));
while ((line = buffer.readLine()) != null) {
sb.append(line);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
buffer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return sb.toString();
}
}
获取返回字符串之后要对此JSON数据进行解析:
[java] view
plain copy
package org.lxh.demo;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.json.JSONObject;
public class Util {
public List<Map<String, Object>> getInformation(String jonString)
throws Exception {
JSONObject jsonObject = new JSONObject(jonString);
JSONObject retData = jsonObject.getJSONObject("retData");
List<Map<String, Object>> all = new ArrayList<Map<String, Object>>();
Map<String, Object> map = new HashMap<String, Object>();
map.put("cityName", retData.optString("city"));
map.put("weather", retData.optString("weather"));
map.put("temp", retData.optString("temp"));
map.put("l_temp", retData.optString("l_tmp"));
map.put("h_temp", retData.optString("h_tmp"));
all.add(map);
return all;
}
}
下面Activity程序:
[java] view
plain copy
package org.lxh.demo;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class Main extends Activity {
private EditText citynameEditText;
private Button searchWeatherButton;
private TextView citynametTextView;
private TextView weahterTextView;
private TextView tempTextView;
private TextView h_tempTextView;
private TextView l_tempTextView;
String jonString;
ProgressDialog progressDialog;
private static final int SET = 1;
@SuppressLint("HandlerLeak")
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case SET:
Util util = new Util();
try {
List<Map<String, Object>> all = util
.getInformation(msg.obj.toString());
Iterator<Map<String, Object>> iterator = all.iterator();
while (iterator.hasNext()) {
Map<String, Object> map = iterator.next();
Log.d("天气", map.get("weather").toString());
citynametTextView.setText(map.get("cityName")
.toString());
weahterTextView.setText(map.get("weather").toString());
tempTextView.setText(map.get("temp").toString());
h_tempTextView.setText(map.get("l_temp").toString());
l_tempTextView.setText(map.get("h_temp").toString());
}
} catch (Exception e) {
e.printStackTrace();
} finally {
}
break;
}
}
};
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); // 生命周期方法
super.setContentView(R.layout.main); // 设置要使用的布局管理器
citynameEditText = (EditText) findViewById(R.id.myedit);
searchWeatherButton = (Button) findViewById(R.id.searchweather);
citynametTextView = (TextView) findViewById(R.id.city);
weahterTextView = (TextView) findViewById(R.id.weather);
tempTextView = (TextView) findViewById(R.id.temp);
h_tempTextView = (TextView) findViewById(R.id.h_temp);
l_tempTextView = (TextView) findViewById(R.id.l_temp);
searchWeatherButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
new Thread(new NewThread()).start();
Log.d("按键", "Success");
}
});
}
private class NewThread implements Runnable {
public void run() {
String address = "http://apistore.baidu.com/microservice/weather?citypinyin="
+ citynameEditText.getText().toString();
HttpDownloader httpDownloader = new HttpDownloader();
String jonString = httpDownloader.download(address);
Message msg = Main.this.handler
.obtainMessage(Main.SET, jonString);
Main.this.handler.sendMessage(msg);
}
}
}
问题:查询是只能输拼音,有事无法区分。
相关文章推荐
- JMeter数据库性能测试
- 字符串处理
- 循环链表的基本操作
- netstat Recv-Q和Send-Q
- java.io.IOException: Prepare failed.: status=0x1
- strcpy和memcpy的区别
- 13. 通用的操作系统功能库(1)
- 关于 变量越界
- 13. 通用的操作系统功能库(1)
- Thinkphp 空操作、空控制器、命名空间
- android-async-http 源码流程浅析
- 13.2节练习
- 关于H264中I帧,P帧的判断
- C#中RestoreDirectory属性
- C语言程序设计第二节课作业
- 关于分布式事务、两阶段提交协议、三阶提交协议
- Android Studio教程从入门到精通
- javascript 随记
- 一篇学习HTTP状态码的神文:爱情的力量、生活的乐趣
- C语言程序设计第三节课作业