运行界面:
1.修改了下之前的代码,不用导入数据库到/data/data/包名 文件夹下,直接放在/res/raw文件夹不会被二进制压缩
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; }
JSON mJson = new JSON(MainActivity.this);
db = DBUtils.openDatabase(mContext);
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; } }
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类型显示出来
代码:
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; }
http://pan.baidu.com/share/link?shareid=186137&uk=3875834366