扬州旅游app(二)
来源:互联网 发布:华资软件 编辑:程序博客网 时间:2024/06/12 00:18
转载请注明出处,谢谢。
在上一篇文章里,我们写完了Splash页面和主页面。本程序预计有9个功能,详情请看主页面9个模块。
接下来我先来完成天气预报功能。
首先天气预报功能我在本程序之前,我也没写过。在DevStore上看了2个开源的程序,但是太复杂,本模块只需要让使用者了解当天扬州的天气就好了,所以不存在选择城市问题,界面我也做的比较粗糙。大家可以自行修改显示UI。
下面先上图。
页面由2个TextView组成。第二个TextView显示我们想表达的内容。
下面贴出代码。
<?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:gravity="center_horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="扬州今日天气" android:textColor="#ff0000" android:textSize="22sp" /> <TextView android:id="@+id/tv_show_tianqi" android:gravity="center_horizontal" android:layout_width="match_parent" android:layout_height="match_parent" android:textColor="#000000" android:textSize="22sp" /></LinearLayout>
接下来就去实现天气预报的逻辑代码了。
首先从主页面跳转到天气预报界面。
intent = new Intent(HomeActivity.this,YangzhoutianqiActivity.class);startActivity(intent);
</pre><p>在天气预报界面,因为查询天气可能需要较长的时间,所以我们通过子线程去完成更新天气的逻辑。</p><p>然后通过handler对象去更新界面。</p><p>获取天气的步骤如下:</p><p>首先获取扬州的城市代码101190601,然后通过<a target=_blank href="http://www.weather.com.cn/data/sk/101190601.html" target="_blank">http://www.weather.com.cn/data/sk/101190601.html</a>去获取</p><p>天气预报的JSON数据,接下来去解析JSON数据。然后用TextView去显示。</p><p>下面给出代码</p><pre class="java" name="code">package org.guya.tourism;import java.io.IOException;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import org.guya.tourism.utils.StreamTools;import org.json.JSONArray;import org.json.JSONException;import org.json.JSONObject;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.util.Log;import android.widget.TextView;import android.widget.Toast;public class YangzhoutianqiActivity extends Activity {protected static final String TAG = "YangzhoutianqiActivity";protected static final int OK = 0;private TextView tv_show_tianqi;private String city;private String cityid;private String temp;private String WD;private String WS;private String SD;private String WSE;private String time;private String isRadar;private String Radar;private String njd;private String qy;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.activity_tianqiyubao);tv_show_tianqi = (TextView) findViewById(R.id.tv_show_tianqi);updateTQ();}Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {// TODO Auto-generated method stubsuper.handleMessage(msg);if (msg.what == OK) {Toast.makeText(YangzhoutianqiActivity.this, "我要显示天气啦", 1).show();tv_show_tianqi.setText("city:" + city + "\n" + "cityid:"+ cityid + "\n" + "temp:" + temp + "\n" + "WD:"+ WD + "\n" + "WS:" + WS + "\n" + "SD:" + SD + "\n"+ "WSE:" + WSE + "\n" + "time:" + time + "\n"+ "isRadar:" + isRadar + "\n" + "Radar:" + Radar+ "\n" + "njd:" + njd + "\n" + "qy:" + qy + "\n");}}};/** * 联网更新天气 */private void updateTQ() {new Thread() {public void run() {Message mes = Message.obtain();try {// serverurl="http://www.weather.com.cn/data/sk/101190601.html"URL url = new URL(getString(R.string.serverurl));HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setConnectTimeout(5000);conn.setRequestMethod("GET");int code = conn.getResponseCode();if (code == 200) {// 联网成功InputStream is = conn.getInputStream();// 把流转成StringString result = StreamTools.readFromStream(is);// json解析// {"weatherinfo":{"city":"扬州","cityid":"101190601","temp":"7","WD":"西风","WS":"2级","SD":"30%","WSE":"2","time":"12:25","isRadar":"0","Radar":"","njd":"暂无实况","qy":"1027"}}JSONObject obj = new JSONObject(result);JSONObject obj1 = obj.optJSONObject("weatherinfo");city = obj1.optString("city");cityid = obj1.optString("cityid");temp = obj1.optString("temp");WD = obj1.optString("WD");WS = obj1.optString("WS");SD = obj1.optString("SD");WSE = obj1.optString("WSE");time = obj1.optString("time");isRadar = obj1.optString("isRadar");Radar = obj1.optString("Radar");njd = obj1.optString("njd");qy = obj1.optString("qy");}} catch (MalformedURLException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (JSONException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {mes.what = OK;handler.sendMessage(mes);}}}.start();}}
因为涉及到连接网络,所以要去清单文件里去设置一下用户权限
<uses-permission android:name="android.permission.INTERNET"/>
到此,咱们的天气预报功能就完成了。
0 0
- 扬州旅游app(二)
- 扬州旅游app(一)
- 扬州旅游app(三)
- 扬州旅游app(四)
- 扬州旅游app(五)
- 旅游出行 APP 哪家强?
- 旅游类APP-环境搭建
- 旅游项目(二)初涉Bootstrap
- 旅游保险App(iOS)界面设计
- 爱旅游app开发策划解决方案
- 旅游类APP-Android模块分析
- 旅游类App的原型制作分享
- Guides-旅游类App原型分享
- 旅游类App原型制作分享-Triposo
- 露眼看App--怎样做一款旅游类的App ?
- 旅游
- 旅游
- 旅游~~
- android design潮流,高仿微信5.2界面实现
- HDU2009
- 【LeetCode】Merge Intervals
- 给Eclipse提速的7个技巧
- java.lang.Enum.valueOf()方法实例
- 扬州旅游app(二)
- C语言格式化输入输出函数使用
- FreeBSD的配置经验
- hibernate 10 事务和并发 | hibernate 实战(第二版) 第10章事务和并发 | 笔记
- 美版t430笔记本win8系统下装Ubuntu的一些尝试和遇到的问题
- Android Bootloader LittleKernel的两篇文章
- 如何让 height:100%; 起作用
- nginx简单负载均衡设置
- mysql中limit的用法深入分析