博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Fastjson获取天气信息封装bean
阅读量:4982 次
发布时间:2019-06-12

本文共 7719 字,大约阅读时间需要 25 分钟。

天气预报接口网上一艘一大堆。。

基本是国家天气预报的和google 啊 雅虎啊等。

给个示例地址:http://blog.21004.com/post/178.html

还有和json在线格式化地址:http://tmxk.org/c/json/ 

然后就是FastJson 地址:http://code.alibabatech.com/wiki/pages/viewpage.action?pageId=2424946

关于Fastjson是干什么的,可以百度,简单解释就是把 json字符串封装为bean 或者吧bean 封装成 json 方便快读填充 。


 

正文:

获取天气,封装了一个类,根据请求地址返回天气信息,代码:

package com.wangyyworks.weatherworks;import org.apache.http.client.ResponseHandler;import org.apache.http.client.methods.HttpGet;import org.apache.http.impl.client.BasicResponseHandler;import org.apache.http.impl.client.DefaultHttpClient;import utils.NetUtil;import android.content.Context;import android.util.Log;import android.widget.Toast;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;import com.wangyyworks.weatherworks.R.string;/** * 定时从网络获取天气信息,单例使用。 2013-6-7 21:02:16 测试通过 *  * @author wang_xiaohao *  */public class WeatherInfoProvider {    private static final String TAG = "WeatherInfoProvider";    public String weatheruri = "http://m.weather.com.cn/data/101010100.html";// 天气预报的uir    private static Context mContext;    private String fastjsonkey = "weatherinfo";// 用来设置json返回主句后获得Object                                                // 然后获得天气的bean 不然不能填充数据;    private WeatherInfo weatherinfo;// 用来封装请求返回数据的bean;    private WeatherInfoProvider() {    };    private static WeatherInfoProvider weatherinfoprovider;    /**     * 单例模式     *      * @param context     *            需要传递上下文     * @return     */    public static WeatherInfoProvider getInstance(Context context) {        mContext = context;        if (weatherinfoprovider == null) {            weatherinfoprovider = new WeatherInfoProvider();        }        return weatherinfoprovider;    }    /**     * 根据uri请求获取天气信息返回     *      * @param uri     *            请求天气的uri 代码     * @return 返回此uri天气信息     */    private WeatherInfo getWeatherInfo(String weatheruri) {        // 使用nettuils访问uri 然后封装返回信息;        // 判断网络是否正常        if (NetUtil.checkNet(mContext)) {            // 访问网络,返回获取后的天气信息bean            WeatherInfo weatherinfo = httpClientConn(weatheruri);            // TODO接下来,可以传递进行匹配展示        }        return null;    }    /**     * 根据需要请求的地址 返回请求信息封装bean     * 使用HttpCient连接到国家天气网站 信息 地址:http://m.weather.com.cn/data/101010100.html     * @param weatheruri     *            需要请求城市地址     * @return 返回请求城市天气信息的bean 如果为null表示请求失败     */    protected WeatherInfo httpClientConn(String weatheruri) {        DefaultHttpClient httpclient = new DefaultHttpClient();        HttpGet httpget = new HttpGet(weatheruri);        ResponseHandler
responseHandler = new BasicResponseHandler(); try { String content = httpclient.execute(httpget, responseHandler); Log.i(TAG, "连接服务器成功!"); // 设置TextView Log.i(TAG, content); // 开始填充数据 content = content.substring(content.indexOf(":") + 1, content.lastIndexOf("}"));// 截取需要的部分、不包含{"weatherinfo":和结尾的} Log.i(TAG, "测试获得字符串下面继续解析" + content); weatherinfo = JSON.parseObject(content, WeatherInfo.class); Log.i(TAG, "weatherinfo tostring" + weatherinfo.toString()); } catch (Exception e) { Log.i(TAG, "连接失败。。。。。"); e.printStackTrace(); } finally { // 关闭网络连接 httpclient.getConnectionManager().shutdown(); } return weatherinfo; }}

用到一个工具类,检查手机是否联网,没细研究 ,NetUtil代码:

 

1 package utils; 2  3 import android.content.ContentResolver; 4 import android.content.Context; 5 import android.database.Cursor; 6 import android.net.ConnectivityManager; 7 import android.net.NetworkInfo; 8 import android.net.Uri; 9 10 public class NetUtil {11     private static Uri PREFERRED_APN_URI = Uri.parse("content://telephony/carriers/preferapn");12 13     /**14      * 获取当前手机端的联网方式 一旦检测到当前用户使用的是wap方式,设置ip和端口15      */16     public static boolean checkNet(Context context) {17         boolean wifiConnectivity = isWIFIConnectivity(context);18         boolean mobileConnectivity = isMobileConnectivity(context);19 20         if (wifiConnectivity == false && mobileConnectivity == false) {21             // 需要配置网络22             return false;23         }24 25         // mobile(APN)26         if (mobileConnectivity) {27             // wap方式时端口和ip28             // 不能写死:IP是10.0.0.172 端口是8029             // 一部分手机:IP是010.000.000.172 端口是8030             // 读取当亲的代理信息31             readApn(context);32         }33         return true;34     }35 36     /**37      * 读取ip和端口信息38      * 39      * @param context40      */41     private static void readApn(Context context) {42         ContentResolver resolver = context.getContentResolver();43         Cursor query = resolver.query(PREFERRED_APN_URI, null, null, null, null);// 获取手机Apn:获取当前处于激活状态的APN信息44         if (query != null && query.moveToFirst()) {45             GloableParams.PROXY_IP = query.getString(query.getColumnIndex("proxy"));46             GloableParams.PROXY_PORT = query.getInt(query.getColumnIndex("port"));47         }48 49     }50 51     /**52      * WIFI是否连接53      * 54      * @param context55      * @return56      */57     public static boolean isWIFIConnectivity(Context context) {58         ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);59         NetworkInfo info = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);60         if (info != null)61             return info.isConnected();62         return false;63     }64 65     /**66      * 手机APN是否连接67      * 68      * @param context69      * @return70      */71     public static boolean isMobileConnectivity(Context context) {72         ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);73         NetworkInfo info = manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);74         if (info != null)75             return info.isConnected();76         return false;77     }78 79 }

 

基本就些了。

WeatherInfo weatherinfo = httpClientConn(weatheruri);

返回的json数据封装到了weatherinfo,这个类中全部是i常量,贴出来没意义,写这个类时候用了notepad++ 的替换,不然要吐血。。

接下来,构思下数据保存和服务,布局。

两天能写出来?额,加油,骚年。

想获取一天中的温度变化,接口不提供,悲催。。

做饭去,饿了。。。。

格式化了下封装好的结果,看起来舒服多了:

06-07 21:27:24.707: I/WeatherInfoProvider(14257): weatherinfo  tostringWeatherInfo  [     city=北京     city_en=beijing     date_y=2013年6月7日     date=     week=星期五     fchh=18     cityid=101010100     temp1=19℃~23℃     temp2=18℃~22℃     temp3=16℃~23℃     temp4=14℃~29℃     temp5=19℃~30℃     temp6=20℃~29℃     tempF1=66.2℉~73.4℉     tempF2=64.4℉~71.6℉     tempF3=60.8℉~73.4℉     tempF4=57.2℉~84.2℉     tempF5=66.2℉~86℉     tempF6=68℉~84.2℉     weather1=阵雨转雷阵雨     weather2=大雨转小雨     weather3=阴转阵雨     weather4=多云转晴     weather5=晴     weather6=多云     img1=3     img2=4     img3=9     img4=7     img5=2     img6=3     img7=1     img8=0     img9=0     img10=99     img11=1     img12=99     img_single=4     img_title1=阵雨     img_title2=雷阵雨     img_title3=大雨     img_title4=小雨     img_title5=阴     img_title6=阵雨     img_title7=多云     img_title8=晴     img_title9=晴     img_title10=晴     img_title11=多云     img_title12=多云     img_title_single=雷阵雨     wind1=微风     wind2=微风     wind3=微风     wind4=微风     wind5=微风     wind6=微风     fx1=微风     fx2=微风     fl1=小于3级     fl2=小于3级     fl3=小于3级     fl4=小于3级     fl5=小于3级     fl6=小于3级     index=较舒适     index_d=建议着薄外套、开衫牛仔衫裤等服装。年老体弱者应适当添加衣物,宜着夹克衫、薄毛衣等。     index48=较舒适     index48_d=建议着薄外套、开衫牛仔衫裤等服装。年老体弱者应适当添加衣物,宜着夹克衫、薄毛衣等。     index_uv=最弱     index48_uv=最弱     index_xc=不宜     index_tr=一般     index_co=舒适     st1=21     st2=17     st3=20     st4=16     st5=21     st6=15     index_cl=较不宜     index_ls=不宜     index_ag=极不易发]

 

回见~

转载于:https://www.cnblogs.com/wang-xiaohao/archive/2013/06/07/3125313.html

你可能感兴趣的文章
从用户端到后台系统,严选分销教会我这些事
查看>>
数据分析融入至BI工具的新思路
查看>>
c#必会知识点
查看>>
网页使用MD5加密
查看>>
JS 基础
查看>>
HBase shell 中的十六进制数值表示
查看>>
Python3 中 configparser 模块解析配置的用法详解
查看>>
新手android环境搭建、debug调试及各种插件安装__图文全解
查看>>
未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序 win2008R2 X64 IIS7.5
查看>>
Diffuse贴图+Lightmap+Ambient
查看>>
矩阵树定理
查看>>
[算法]Evaluate Reverse Polish Notation
查看>>
go语言之进阶篇接口的定义和实现以及接口的继承
查看>>
SmartPhone手机网站的制作
查看>>
自适应全屏与居中算法
查看>>
构建之法阅读笔记(一)
查看>>
帮助你设计的50个自由和新鲜的图标集
查看>>
Glusterfs[转]
查看>>
javascript缩写
查看>>
GA来源分析
查看>>