a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 系統 > Android > 正文

Android天氣預報之基于HttpGet對象解析天氣數據的方法

2020-04-11 11:45:20
字體:
來源:轉載
供稿:網友

本文實例所述為Android天氣預報之解析天氣數據的代碼,可實現獲取HttpGet對象讀取天氣網站天氣數據,并從數據中解析出天氣數據,比如溫度、溫度、風力、風向、未來幾天天氣趨勢、當天天氣狀況、空氣污染指數等信息,還包括了調用對應的圖片或天氣動畫文件,對于開發android天氣預報程序的可以參考本文實例。

具體功能代碼如下:

import java.io.IOException;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.List;import java.util.Locale;import net.tsz.afinal.FinalHttp;import net.tsz.afinal.http.AjaxCallBack;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 org.lmw.weather.MyApp;import org.lmw.weather.entity.WeatherEntity;import android.app.Activity;import android.os.Handler;import android.os.Message;/** * 解析天氣數據 * @author Dave */public class WeatherData { private Activity activity; private FinalHttp fh; public static String def_weather_key="def_weather"; public WeatherData(Activity activity) { this.activity = activity; fh = new FinalHttp(); fh.configTimeout(1000 * 3); } public void getData(final String cityId,final Handler hd) { StringBuffer sb_url = new StringBuffer(); sb_url.append("http://0.qnweather.duapp.com/weather.php?uri="); sb_url.append("http://m.weather.com.cn/data/"); sb_url.append(cityId); sb_url.append(".html"); final Message msg=new Message(); fh.get(sb_url.toString(), new AjaxCallBack() {  @Override  public void onSuccess(Object t) {  super.onSuccess(t);  MySharedPreferences.writeMessage(activity, "def_weather",t.toString());  msg.what=0;  msg.obj=parseJson(t.toString());  hd.sendMessage(msg);  }  @Override  public void onFailure(Throwable t, int errorNo, String strMsg) {  super.onFailure(t, errorNo, strMsg);  System.out.println("-------errorNo---------"+errorNo);  msg.what=-1;  msg.arg1=errorNo;  msg.obj=MySharedPreferences.readMessage(activity, def_weather_key, "");  hd.sendMessage(msg);  } }); } private String connServerForResult(String strUrl) { // 獲取HttpGet對象 HttpGet httpRequest = new HttpGet(strUrl); String strResult = ""; try {  // HttpClient對象  HttpClient httpClient = new DefaultHttpClient();  // 獲得HttpResponse對象  HttpResponse httpResponse = httpClient.execute(httpRequest);  if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {  // 取得返回的數據  strResult = EntityUtils.toString(httpResponse.getEntity());  } } catch (ClientProtocolException e) {  e.printStackTrace(); } catch (IOException e) {  e.printStackTrace(); } catch (Exception e) {  e.printStackTrace(); } System.out.println("rresult" + strResult); return strResult; // 返回結果 } // 數據解析 private WeatherEntity parseJson(String strResult) { WeatherEntity weather = null; try {  JSONObject jsonObj = new JSONObject(strResult.replace("℃", "°"))   .getJSONObject("weatherinfo");  weather = new WeatherEntity();  int ftime = jsonObj.getInt("fchh"); // 更新時間(整點)【更新時間確定temp屬于哪天】  int temp = 0; // 偏移  if (ftime >= 18 || ftime < 8) {  weather.setNight(true);  temp = 1;  }  MyApp.week = jsonObj.getString("week");// 今天星期幾  weather.setCity(jsonObj.getString("city")); // 城市  weather.setComfortable(jsonObj.getString("index")); // 舒適度  weather.setRefreshDate(getDate()); // 更新日期  weather.setRefreshTime(getTime()); // 更新時間  weather.setRefreshWeek(getWeek()); // 更新星期  weather.setPicIndex(jsonObj.getInt("img1")); // 當天天氣圖片編號  List<Integer> topPic = new ArrayList<Integer>(); // 最高溫時的圖片編號  if (temp == 1) {  topPic.add(getSavePic(activity));  } else {  topPic.add(getJsonPic(jsonObj, "img", 1 + temp));  savePic(activity, topPic.get(0));  }  topPic.add(getJsonPic(jsonObj, "img", 3 - temp));  topPic.add(getJsonPic(jsonObj, "img", 5 - temp));  topPic.add(getJsonPic(jsonObj, "img", 7 - temp));  weather.setTopPic(topPic);  List<Integer> lowPic = new ArrayList<Integer>(); // 最低溫時的圖片編號  lowPic.add(getJsonPic(jsonObj, "img", 2 - temp));  lowPic.add(getJsonPic(jsonObj, "img", 4 - temp));  lowPic.add(getJsonPic(jsonObj, "img", 6 - temp));  lowPic.add(getJsonPic(jsonObj, "img", 8 - temp));  weather.setLowPic(lowPic);  // ---------------------------以上為獲取圖片編號,暫且不管----------------------------------------------------------------------  List<String> tempList = new ArrayList<String>(); // 未來五天溫度(第一個是今天)  tempList.add(jsonObj.getString("temp1"));  tempList.add(jsonObj.getString("temp2"));  tempList.add(jsonObj.getString("temp3"));  tempList.add(jsonObj.getString("temp4"));  tempList.add(jsonObj.getString("temp5"));  tempList.add(jsonObj.getString("temp6"));  MyApp.tempList.clear();  MyApp.tempList = tempList;  List<String> weatherList = new ArrayList<String>();// 未來五天天氣(第一個是今天)  weatherList.add(jsonObj.getString("weather1"));  weatherList.add(jsonObj.getString("weather2"));  weatherList.add(jsonObj.getString("weather3"));  weatherList.add(jsonObj.getString("weather4"));  weatherList.add(jsonObj.getString("weather5"));  weatherList.add(jsonObj.getString("weather6"));  MyApp.weatherList.clear();  MyApp.weatherList = weatherList;  List<String> tempListMax = new ArrayList<String>(); // 未來五天最高溫度集合(有°符號)  if (temp == 1) {  tempListMax.add(getSaveTemperature(activity));  } else {  tempListMax   .add(getTemperatureMaxAndMin(tempList.get(0))[0 + temp]);  saveTemperature(activity, tempListMax.get(0));  }  tempListMax   .add(getTemperatureMaxAndMin(tempList.get(1 - temp))[0 + temp]);  tempListMax   .add(getTemperatureMaxAndMin(tempList.get(2 - temp))[0 + temp]);  tempListMax   .add(getTemperatureMaxAndMin(tempList.get(3 - temp))[0 + temp]);  weather.setTemperatureMax(tempListMax);  weather.setTodayTemperature(getTemperatureMaxAndMin(tempList.get(0))[0]); // 當天溫度(實時)  weather.setTodayWeather(jsonObj.getString("img_title1")); // 當天天氣描述(實時)  List<String> tempListMin = new ArrayList<String>(); // 未來四天最低溫度集合(有°符號)  tempListMin.add(getTemperatureMaxAndMin(tempList.get(0))[1 - temp]);  tempListMin.add(getTemperatureMaxAndMin(tempList.get(1))[1 - temp]);  tempListMin.add(getTemperatureMaxAndMin(tempList.get(2))[1 - temp]);  tempListMin.add(getTemperatureMaxAndMin(tempList.get(3))[1 - temp]);  weather.setTemperatureMin(tempListMin);  weather.setTomorrowTemperature(tempList.get(1)); // 明天溫度(包括最高溫和最低溫)  if (temp == 1) {  weatherList.add(getSaveWeather(activity));  } else {  weatherList.add(jsonObj.getString("weather" + 1));  saveWeather(activity, weatherList.get(0));  }  weatherList.add(jsonObj.getString("weather" + (2 - temp)));  weatherList.add(jsonObj.getString("weather" + (3 - temp)));  weatherList.add(jsonObj.getString("weather" + (4 - temp)));  weather.setWeather(weatherList);  weather.setTomorrowWeather(weatherList.get(1));  List<String> windList = new ArrayList<String>(); // 未來四天風力  windList.add(jsonObj.getString("wind1"));  windList.add(jsonObj.getString("wind2"));  windList.add(jsonObj.getString("wind3"));  windList.add(jsonObj.getString("wind4"));  weather.setWind(windList);  weather.setMaxlist(transplate(tempListMax)); // 未來四天最高溫度集合(無°符號)  weather.setMinlist(transplate(tempListMin)); // 未來四天最低溫度集合(無°符號) } catch (JSONException e) {  e.printStackTrace(); } return weather; } // 獲取更新日期 并轉換為(X月X日 周X) private String getDate() { SimpleDateFormat sdf = new SimpleDateFormat("MM月dd日 EEE", Locale.CHINA); String date = sdf.format(new java.util.Date()); System.out.println(date); return date; } // 獲取更新時間 并轉換為 (小時:分鐘 更新) private String getTime() { SimpleDateFormat sdf = new SimpleDateFormat("HH:mm", Locale.CHINA); String time = sdf.format(new java.util.Date()) + " " + "更新"; System.out.println(time); return time; } private String getWeek() { return null; } // 獲取最高溫度和最低溫度,有°符號 private String[] getTemperatureMaxAndMin(String str) { return str.split("~"); } // 去除最高溫度和最低溫度里的°符號 private List<Integer> transplate(List<String> strList) { List<Integer> intList = new ArrayList<Integer>(); for (String temp : strList) {  intList.add(Integer.valueOf(temp.split("°")[0])); } return intList; } // 獲取圖片編號 例如"img" + "1" private int getJsonPic(JSONObject jsonObj, String str, int index)  throws JSONException { int result = jsonObj.getInt(str + index); if (result == 99 && index > 1) {  index--;  result = jsonObj.getInt(str + index); } return result; } private void saveTemperature(Activity activity, String value) { // MySharedPreferences mp = new MySharedPreferences(activity); // mp.writeMessage("temperature", value); } // 保存的溫度 private String getSaveTemperature(Activity activity) { return MySharedPreferences.readMessage(activity,"temperature", "100"); } private void saveWeather(Activity activity, String value) { // MySharedPreferences mp = new MySharedPreferences(activity); // mp.writeMessage("weather", value); } // 保存的天氣 private String getSaveWeather(Activity activity) { return MySharedPreferences.readMessage(activity,"weather", ""); } private void savePic(Activity activity, int value) { // MySharedPreferences mp = new MySharedPreferences(activity); // mp.writeMessage("pic", value); } // 保存的天氣圖片編號 private int getSavePic(Activity activity) { return MySharedPreferences.readMessage(activity,"pic", 99); }}

希望本文實例對大家Android天氣預報程序的開發能夠起到一定的幫助作用。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 最新黄网在线观看 | 亚洲一区av | 大色欧美| 欧美一区二区人人喊爽 | 日韩国产在线观看 | 久草高清 | 色噜噜综合网 | 亚洲视频一区在线 | 国产一级一级毛片女人精品 | 国产精品片aa在线观看 | 天天操网 | 午夜视频在线观看网站 | 日韩精品区 | 午夜视频网站 | 久久久久国产一区二区三区 | 操操操av | 91九色porny首页最多播放 | 三级精品 | 成人欧美一区二区三区视频xxx | 91九色porny首页最多播放 | www.久久久.com| 日日碰碰 | 国产成人精品一区二区三区视频 | 成人免费高清视频 | 国产精品不卡一区 | av性色| 国产精品一区二区在线 | 婷婷激情综合 | 欧美日韩第一区 | 国产精品成人在线观看 | 午夜精品久久久久久久久 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 亚洲精选一区 | av在线免费观看网站 | 国产欧美日本 | 麻豆久久| 黄色一级片视频播放 | 伊人网站 | 日韩中文字幕 | 国产a久久精品一区二区三区 | 亚洲欧美中文日韩在线v日本 |