android 天气。。待整理

1.修改了下之前的代码,不用导入 数据库到/data/data/包名 文件夹下,直接放在/res/raw文件夹不会被二进制压缩
 
 
[java]  
public static SQLiteDatabase openDatabase(Context context) {  
        try {  
            // Context context=new TestActivity();  
            String databaseFilename = DATABASE_PATH + "/" + DATABASE_FILENAME;  
            File dir = new File(DATABASE_PATH);  
            if (!dir.exists()) // 如果文件夹不存在创建文件夹  
            {  
                dir.mkdir();  
                System.out.println("File build success");  
            }  
            if (!(new File(databaseFilename)).exists()) { // 如果文件不存在创建文件  
                InputStream is = context.getResources().openRawResource(  
                        R.raw.chinacity);  
                FileOutputStream fos = new FileOutputStream(databaseFilename);  
                byte[] buffer = new byte[8192];  
                int count = 0;  
                while ((count = is.read(buffer)) > 0) {  
                    fos.write(buffer, 0, count);  
                }  
                fos.close();  
                is.close();  
            }  
            db = SQLiteDatabase.openOrCreateDatabase(databaseFilename, null);  
  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
        if (db != null) {  
            System.out.println("db build success!");  
        } else {  
            System.out.println("db build failed!");  
        }  
        return db;  
    }  
 
得到数据库:
 
[java]  
JSON mJson = new JSON(MainActivity.this);  
 
[java] 
db = DBUtils.openDatabase(mContext);  
 
2.连接网络:
[java]  
private static String getConnection(String path)  
            throws MalformedURLException, IOException, ProtocolException {  
        URL url = new URL(path);  
        try {  
            HttpURLConnection cn = (HttpURLConnection) url.openConnection();  
            cn.setConnectTimeout(5 * 1000);  
            cn.setRequestMethod("GET");  
            // System.out.println("stream=======" + cn.getInputStream());  
            InputStreamReader in = new InputStreamReader(cn.getInputStream());  
            // System.out.println("in======" + in);  
  
            // 流的应用与读取  
            BufferedReader bu = new BufferedReader(in);  
            String line = bu.readLine().toString();  
            System.out.println("流数据line========" + line);  
            bu.close();  
            in.close();  
            return line;  
        } catch (Exception e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
            System.out.println("查询失败,请检查网络...");  
            return null;  
        }  
    }  
 
注:这里我试过所有华为手机都连接不了,其他的htl,中兴都可以,不知道什么原因
 
3.json获取数据,通过中央气象台的apt访问
 
 
使用http://www.weather.com.cn/data/sk/101010100.html获取当日天气的信息,打开网址可以看到文本信息如下(已经格式化过):
 
 
 
{"weatherinfo":
 
{"city":"北京”,
 
"cityid":"101010100”,
 
"temp":"-1”,
 
"WD":"北风”,
 
"WS":"3级”,
 
"SD":"18%”,
 
"WSE":"3”,
 
"time":"15:10”,
 
"isRadar":"1”,
 
"Radar":"JC_RADAR_AZ9010_JB"}
 
}
 
这是一个JSON数据格式信息,接下来会通过解析来获取其中信息,我们需要的字段如下表1.1.1 1所示:
 
 
 
字段名称
 
代码含义
 
city
 
城市名称
 
cityid
 
城市id
 
temp
 
实时温度
 
WD
 
风向
 
WS
 
风级数
 
SD
 
湿度
 
time
 
天气预报发布时间
 
 
 
表1.1.1‑1    关键字段及其含义1
 
 
 
其中最关键的字段是cityid,解析天气将会使用这个字段作为唯一标识符,同样使用api: http://m.weather.com.cn/data/101010100.html获取未来五天的天气情况及其图标,打开连接地址得到如下文本(已经格式化):
 
 
 
{"weatherinfo":
 
{"city":"北京”,
 
"city_en":"beijing”,
 
"date_y":"2013年1月8日”,
 
"date":"“,
 
"week":"星期二”,
 
"fchh":"11”,
 
"cityid":"101010100”,
 
"temp1":"0℃~-11℃”,
 
"temp2":"0℃~-10℃”,
 
"temp3":"0℃~-7℃”,
 
"temp4":"2℃~-7℃”,
 
"temp5":"1℃~-6℃”,
 
"temp6":"0℃~-6℃”,
 
"tempF1":"32℉~12.2℉”,
 
"tempF2":"32℉~14℉”,
 
"tempF3":"32℉~19.4℉”,
 
"tempF4":"35.6℉~19.4℉”,
 
"tempF5":"33.8℉~21.2℉”,
 
"tempF6":"32℉~21.2℉”,
 
"weather1":"晴”,
 
"weather2":"晴”,
 
"weather3":"多云转阴”,
 
"weather4":"多云转晴”,
 
"weather5":"晴转多云”,
 
"weather6":"多云转晴”,
 
"img1":"0”,
 
"img2":"99”,
 
"img3":"0”,
 
"img4":"99”,
 
"img5":"1”,
 
"img6":"2”,
 
"img7":"1”,
 
"img8":"0”,
 
"img9":"0”,
 
"img10":"1”,
 
"img11":"1”,
 
"img12":"0”,
 
"img_single":"0”,
 
"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":"0”,
 
"st2":"-10”,
 
"st3":"0”,
 
"st4":"-7”,
 
"st5":"0”,
 
"st6":"-7”,
 
"index_cl":"适宜”,
 
"index_ls":"基本适宜”,
 
"index_ag":"极不易发"}
 
}
 
 
 
其中用到的关键字段如下表1.1.1-2:
 
 
 
字段名称
 
代码含义
 
city
 
城市名称
 
cityid
 
城市id
 
day_y
 
当前时间
 
temp1
 
今天温度最低温和最高温
 
temp2
 
明天温度最低温和最高温
 
temp3
 
第三天温度最低温和最高温
 
temp4
 
第四天度最低温和最高温
 
temp5
 
第五天度最低温和最高温
 
temp6
 
第六天度最低温和最高温
 
weather1
 
今天天气描述
 
img1
 
今天白天温度图标
 
img3
 
明天白天温度图标
 
img5
 
第三天白天温度图标
 
img7
 
第四天白天温度图标
 
img9
 
第五天白天温度图标
 
img11
 
第六天白天温度图标
 
 
 
表1.1.1‑2    关键字段及对应含义2
 
 
 
注意其中温度坐标字段(img1, img3, img5, img7, img9, img11)只是给出了图标的编号,需要拼接字符串来获取网络图片,比如得到img1,则图片地址为 http://m.weather.com.cn/img/b1.gif这个就是今天白天温度图标的图片网址,其中”b1.gif”就是图片的名字和样式,”b”表示这个图标是50*46像素,”1”就是”img”中的”1”,不同数字表示不同图标,获取图标后就可以通过Bitmap类型显示出来
 
代码:
 
[java]  
public static List<Map<String, String>> getTodayWeather(String path) {  
  
    List<Map<String, String>> list = new ArrayList<Map<String, String>>();  
    String json = null;  
    Map<String, String> map;  
  
    try {  
        String line = getConnection(path);  
        // 字符数组转换成字符串  
  
        if (line != null) {  
            json = new String(line);  
            // 这里是以对象的形式  
            JSONObject item1 = new JSONObject(json);  
            // 得到对象中的对象  
            JSONObject item = item1.getJSONObject("weatherinfo");  
  
            // 城市名字,阴天,3-4°,北风三级,湿度,日期  
            String city = item.getString("city");  
            String temp = item.getString("temp");  
            String wind = item.getString("WD") + item.getString("WS");  
            String wet = item.getString("SD");  
            String time = item.getString("time");  
  
            // 添加到MAP中  
  
            map = new HashMap<String, String>();  
  
            map.put("city", city);  
            map.put("temp", temp);  
            map.put("wind", wind);  
            map.put("wet", wet);  
            map.put("time", time);  
            list.add(map);  
        } else {  
            System.out.println("获取留数据失败!");  
        }  
  
    } catch (MalformedURLException e) {  
        // TODO Auto-generated catch block  
        e.printStackTrace();  
    } catch (ProtocolException e) {  
        // TODO Auto-generated catch block  
        e.printStackTrace();  
    } catch (IOException e) {  
        // TODO Auto-generated catch block  
        e.printStackTrace();  
    } catch (JSONException e) {  
        // TODO Auto-generated catch block  
        e.printStackTrace();  
    }  
    return list;  
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值