上一篇说到将天气数据存储到了数据库中,那么我们怎么将数据库中的数据展示到界面上呢,首先,我们要将数据库导入项目中。
新建assets目录,将.db数据库文件放到该目录下,然后在MainActivity.java中将数据库导入。
/**
* 将assets目录下的文件拷贝到sd上
*
* @return 存储数据库的地址
*/
// 复制和加载区域数据库中的数据
public String copySqliteFileFromAssetsToDatabases(String SqliteFileName) {
// 第一次运行应用程序时,加载数据库到data/data/当前包的名称/database/<db_name>
File dir = new File("data/data/" + getPackageName() + "/databases");
//判断如果文件夹不存在,或者不是一个目录,那么就创建一个文件夹
if (!dir.exists() || !dir.isDirectory()) {
dir.mkdir();
}
//获取file对象
File file = new File(dir, SqliteFileName);
InputStream inputStream = null;
OutputStream outputStream = null;
//通过IO流的方式,将assets目录下的数据库文件,写入到SD卡中。
if (!file.exists()) {
try {
file.createNewFile();
inputStream = getClass().getClassLoader().getResourceAsStream("assets/" + SqliteFileName);
outputStream = new FileOutputStream(file);
byte[] buffer = new byte[1024];
int len;
while ((len = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (outputStream != null) {
try {
outputStream.flush();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
return file.getPath();
}
然后,新建一个类,专门用来对数据库信息进行操作。
获取省市县数据并返回一个集合。
/**
* 从数据库中获得省份信息
*
* @return 省市县信息集合
*/
public List<Province> getProvincesFromSQLite(String sqlPath) {
SQLiteDatabase db = SQLiteDatabase.openDatabase(sqlPath, null, SQLiteDatabase.OPEN_READONLY);
List<Province> provinceList = new ArrayList<>();
if (provinceList.size() == 0) {
Cursor cursor = db.rawQuery("select * from tb_province", null);
provinceList.clear();
//查询省份信息
if (cursor.moveToFirst()) {
do {
Province province = new Province();
province.id = cursor.getInt(cursor.getColumnIndex("id"));
province.provinceName = cursor.getString(cursor.getColumnIndex("province_name"));
// Log.d("sqlprovince_", province.provinceName);
provinceList.add(province);
} while (cursor.moveToNext());
}
//查询城市信息
for (int i = 0; i < provinceList.size(); i++) {
List<City> cityList = new ArrayList<City>();
cursor = db.query("tb_city", new String[]{
"id", "city_name"}, "province_id=?", new String[]{provinceList.get(i).id + ""}, null, null, null);
// Log.d("test__", cursor