Android导入外部数据库解析json获取天气预报
运行界面:
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获取未来五天的天气情况及其图标,
补充:移动开发 , Android ,