运行界面:
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);
2.连接网络:
- 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类型显示出来
代码:
- 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