当前位置:编程学习 > JS >>

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 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,