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;
}