Android口袋天气系列三-->天气数据的获取
来源:互联网 发布:nginx tomcat集群配置 编辑:程序博客网 时间:2024/04/29 03:38
本app的数据是从HaoService数据平台获取的
步骤:
1.通过okhttp框架获取json数据
2.对json数据进行解析
3.字符串的处理,处理成为合适的天气数据: a..普通的函数
b..正则表达式
4.通过handler去更新UI
代码如下:
/** * 根据GPS查询天气 * Created by Administrator on 2016/5/8. */public class WeatherAsyncTask extends AsyncTask<String,Integer,WeatherInfor> { private String currentUrl; //当前访问路径 private ProgressBar progressBar;//进度条 private Handler handler; private WeatherInfor weatherInfor;//城市信息 private PocketWeatherDB pocketWeatherDB; //数据库 private Context context; private int isLocated;//是否为定位城市 public WeatherAsyncTask(Handler handler,Context context,int isLocated) { this.handler=handler; pocketWeatherDB=PocketWeatherDB.getInstance(context); this.isLocated=isLocated; } @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected void onPostExecute(WeatherInfor weatherInfor) { super.onPostExecute(weatherInfor); //传递数据用来更新主界面里面的UI Message msg=new Message(); msg.what=1; Bundle bundle=new Bundle(); bundle.putSerializable("weatherInfor", weatherInfor); msg.setData(bundle); handler.sendMessage(msg); } @Override protected WeatherInfor doInBackground(String... params) { weatherInfor=new WeatherInfor(); currentUrl=params[0]; OkHttpClient okHttpClient=new OkHttpClient(); Request request=new Request.Builder().url(currentUrl).build(); Call call=okHttpClient.newCall(request); try { Response response=call.execute(); if (response.isSuccessful()){ String sj=response.body().string(); weatherInfor=getWeatherInfo(sj); //更新城市名称 if (isLocated==1){ pocketWeatherDB.updateCityName(weatherInfor.getTodayWeather().getCity()); pocketWeatherDB.updateHotCityName(weatherInfor.getTodayWeather().getCity()); } } } catch (IOException e) { e.printStackTrace(); } return weatherInfor; } /** * 解析json数据 * @param */ public WeatherInfor getWeatherInfo(String sj){ WeatherInfor weatherInfor=new WeatherInfor(); try { CurrentWeather currentWeather=new CurrentWeather(); TodayWeather todayWeather=new TodayWeather(); FutureWeather futureWeather=new FutureWeather(); ArrayList<FutureItemWeather> futureItemWeathers=new ArrayList<>(); JSONObject jsonObject=new JSONObject(sj); JSONObject resultObject=jsonObject.getJSONObject("result"); JSONObject skObject=resultObject.getJSONObject("sk"); JSONObject todayObject=resultObject.getJSONObject("today"); JSONArray futureArray=resultObject.getJSONArray("future"); for (int i=0;i<futureArray.length();i++){ JSONObject futureItem=futureArray.getJSONObject(i); FutureItemWeather futureItemWeather=new FutureItemWeather(); //温度数据的处理 String temp=futureItem.getString("temperature").trim(); futureItemWeather.setMinTemp( temp.split("~")[0]); futureItemWeather.setMaxTemp( temp.split("~")[1]); futureItemWeather.setWind(futureItem.getString("wind")); futureItemWeather.setWeather(futureItem.getString("weather")); futureItemWeather.setFa(futureItem.getString("fa")); futureItemWeather.setFb(futureItem.getString("fb")); futureItemWeather.setWeek(futureItem.getString("week")); //日期处理 String mdate=futureItem.getString("date").toString().trim(); String date=""; date=date+mdate.substring(0,4)+"/"+mdate.substring(4,6)+"/"+mdate.substring(6,8); futureItemWeather.setDate(date); futureItemWeathers.add(futureItemWeather); } futureWeather.setFuture(futureItemWeathers); currentWeather.setCurrTemp(skObject.getString("temp")); currentWeather.setWindDirection(skObject.getString("wind_direction")); currentWeather.setWindStrength(skObject.getString("wind_strength")); currentWeather.setHumidity(skObject.getString("humidity")); currentWeather.setRefreshTime(skObject.getString("time")); todayWeather.setCity(todayObject.getString("city")); //日期处理 String mdate=todayObject.getString("date_y"); String date; date=mdate.substring(0,4)+"/"+mdate.substring(5,7)+"/"+mdate.substring(8,10); todayWeather.setDate(date); todayWeather.setWeek(todayObject.getString("week")); //今日温度处理 String temp=todayObject.getString("temperature").trim(); todayWeather.setMaxTemp( temp.split("~")[1]); todayWeather.setMinTemp( temp.split("~")[0]); todayWeather.setWeather(todayObject.getString("weather")); todayWeather.setWind(todayObject.getString("wind")); todayWeather.setDressing_index(todayObject.getString("dressing_index")); todayWeather.setDressing_advice(todayObject.getString("dressing_advice")); todayWeather.setUv_index(todayObject.getString("uv_index")); todayWeather.setComfort_index(todayObject.getString("comfort_index")); todayWeather.setWash_index(todayObject.getString("wash_index")); todayWeather.setTravel_index(todayObject.getString("travel_index")); todayWeather.setExercise_index(todayObject.getString("exercise_index")); todayWeather.setDrying_index(todayObject.getString("drying_index")); weatherInfor.setCurrentWeather(currentWeather); weatherInfor.setTodayWeather(todayWeather); weatherInfor.setFutureWeather(futureWeather); } catch (JSONException e) { e.printStackTrace(); } return weatherInfor; } @Override protected void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); }}
0 0
- Android口袋天气系列三-->天气数据的获取
- Android口袋天气系列五-->天气页面
- Android口袋天气系列二-->百度定位
- Android口袋天气系列四-->数据库封装类
- Android口袋天气系统一-->整体架构
- Android 获取含天气信息的JSON数据
- Android中获取网络天气数据
- 获取天气数据
- 获取网络天气数据---天气小软件
- android-天气获取
- android获取天气API
- 根据天气接口获取其中的数据
- android从中国天气网获取天气
- Android 获取指定城市的天气实况
- 获取每小时的天气
- 城市天气数据获取接口
- 【android学习】android获取天气
- Android使用"中国天气网"API数据通过城市名称获取天气情况
- Scala Standard Library API(01) -- scala.Any
- delegate,block,notification三者区别
- Java问题总结33之利用UUID生成全局唯一码(Scala环境运行)
- Android源码之View的绘制
- 打印图形
- Android口袋天气系列三-->天气数据的获取
- Jedis对redis的操作详解
- Android技术积累:开发规范
- GDOI 2016 Day2 T1 SigemaGO
- 高德地图组件在Android的应用以及Android与JavaScript的交互(二)
- path-sum
- 基础总结篇之七:ContentProvider之读写短消息
- 面试中的排序算法总结
- 屏幕适配全攻略(二)-- 解决方案