扬州旅游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
原创粉丝点击