天气APP实战二(创建表和包的结构)
上一篇地址
创建表和包的结构
1.activity放所有与活动相关的包,以为自己忘记在配置文件注册
2.Db 放于数据库相关的代码 建立数据库 数据持久化操作
3.Model 其实就是实体类
4.Receive 存放所有广播接收器相关的代码
5.Service 存放所有与服务相关的代码
6.Utils 大家都估计是最熟悉的包 放工具类的地方
首先 我们要获取省市县的数据 用数据库进行存储 所以先建数据库 其实 我对于数据库的语言,没有校对工具是很容易错的,所以呢,大家最好现在用SQLiteExpertPers工具去调试下再去COPY到代码中.
WeatherOpenHelper
package com.xiaoxin.Weather.db; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; public class WeatherOpenHelper extends SQLiteOpenHelper { /** * Province表建表语句 */ public static final String CREATE_PROVINCE = "create table Province (" + "id integer primary key autoincrement, " + "province_name text, " + "province_code text)"; /** * City表建表语句 */ public static final String CREATE_CITY = "create table City (" + "id integer primary key autoincrement, " + "city_name text, " + "city_code text, " + "province_id integer)"; /** * County表建表语句 */ public static final String CREATE_COUNTY = "create table County (" + "id integer primary key autoincrement, " + "county_name text, " + "county_code text, " + "city_id integer)"; public WeatherOpenHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(CREATE_PROVINCE); // 创建Province表 db.execSQL(CREATE_CITY); // 创建City表 db.execSQL(CREATE_COUNTY); // 创建County表 } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } }
就是三个建表的语句 最后在oncreate中执行 很简单的
另外每一张表最好有一个实体类,以便于后期开发
城市类
package com.xiaoxin.Weather.model; public class City { private int id; private String cityName; private String cityCode; private int provinceId; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getCityName() { return cityName; } public void setCityName(String cityName) { this.cityName = cityName; } public String getCityCode() { return cityCode; } public void setCityCode(String cityCode) { this.cityCode = cityCode; } public int getProvinceId() { return provinceId; } public void setProvinceId(int provinceId) { this.provinceId = provinceId; } }县
package com.xiaoxin.Weather.model; public class County { private int id; private String countyName; private String countyCode; private int cityId; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getCountyName() { return countyName; } public void setCountyName(String countyName) { this.countyName = countyName; } public String getCountyCode() { return countyCode; } public void setCountyCode(String countyCode) { this.countyCode = countyCode; } public int getCityId() { return cityId; } public void setCityId(int cityId) { this.cityId = cityId; } }省
package com.xiaoxin.Weather.model; public class Province { private int id; private String provinceName; private String provinceCode; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getProvinceName() { return provinceName; } public void setProvinceName(String provinceName) { this.provinceName = provinceName; } public String getProvinceCode() { return provinceCode; } public void setProvinceCode(String provinceCode) { this.provinceCode = provinceCode; } }
可以看出来,实体类的内容都非常简单,基本就是生成数据库表对应字段的get和set方法,接着还需要创建一个coolWeatherDB类 这个类中会把一些常用的数据库操作进行封装,以便于后期使用。
package com.xiaoxin.Weather.db; import java.util.ArrayList; import java.util.List; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import com.xiaoxin.Weather.model.City; import com.xiaoxin.Weather.model.County; import com.xiaoxin.Weather.model.Province; public class WeatherDB { /** * 数据库名 */ public static final String DB_NAME = "weather"; /** * 数据库版本 */ public static final int VERSION = 1; private static WeatherDB coolWeatherDB; private SQLiteDatabase db; /** * 将构造方法私有化 */ private WeatherDB(Context context) { WeatherOpenHelper dbHelper = new WeatherOpenHelper(context, DB_NAME, null, VERSION); db = dbHelper.getWritableDatabase(); } /** * 获取CoolWeatherDB的实例。 */ public synchronized static WeatherDB getInstance(Context context) { if (coolWeatherDB == null) { coolWeatherDB = new WeatherDB(context); } return coolWeatherDB; } /** * 将Province实例存储到数据库。 */ public void saveProvince(Province province) { if (province != null) { ContentValues values = new ContentValues(); values.put("province_name", province.getProvinceName()); values.put("province_code", province.getProvinceCode()); db.insert("Province", null, values); } } /** * 从数据库读取全国所有的省份信息。 */ public List<Province> loadProvinces() { List<Province> list = new ArrayList<Province>(); Cursor cursor = db .query("Province", null, null, null, null, null, null); if (cursor.moveToFirst()) { do { Province province = new Province(); province.setId(cursor.getInt(cursor.getColumnIndex("id"))); province.setProvinceName(cursor.getString(cursor .getColumnIndex("province_name"))); province.setProvinceCode(cursor.getString(cursor .getColumnIndex("province_code"))); list.add(province); } while (cursor.moveToNext()); } return list; } /** * 将City实例存储到数据库。 */ public void saveCity(City city) { if (city != null) { ContentValues values = new ContentValues(); values.put("city_name", city.getCityName()); values.put("city_code", city.getCityCode()); values.put("province_id", city.getProvinceId()); db.insert("City", null, values); } } /** * 从数据库读取某省下所有的城市信息。 */ public List<City> loadCities(int provinceId) { List<City> list = new ArrayList<City>(); Cursor cursor = db.query("City", null, "province_id = ?", new String[] { String.valueOf(provinceId) }, null, null, null); if (cursor.moveToFirst()) { do { City city = new City(); city.setId(cursor.getInt(cursor.getColumnIndex("id"))); city.setCityName(cursor.getString(cursor .getColumnIndex("city_name"))); city.setCityCode(cursor.getString(cursor .getColumnIndex("city_code"))); city.setProvinceId(provinceId); list.add(city); } while (cursor.moveToNext()); } return list; } /** * 将County实例存储到数据库。 */ public void saveCounty(County county) { if (county != null) { ContentValues values = new ContentValues(); values.put("county_name", county.getCountyName()); values.put("county_code", county.getCountyCode()); values.put("city_id", county.getCityId()); db.insert("County", null, values); } } /** * 从数据库读取某城市下所有的县信息。 */ public List<County> loadCounties(int cityId) { List<County> list = new ArrayList<County>(); Cursor cursor = db.query("County", null, "city_id = ?", new String[] { String.valueOf(cityId) }, null, null, null); if (cursor.moveToFirst()) { do { County county = new County(); county.setId(cursor.getInt(cursor.getColumnIndex("id"))); county.setCountyName(cursor.getString(cursor .getColumnIndex("county_name"))); county.setCountyCode(cursor.getString(cursor .getColumnIndex("county_code"))); county.setCityId(cityId); list.add(county); } while (cursor.moveToNext()); } return list; } }
weatherDB 我决定还是下一节 仔细的讲解一下 毕竟 郭大婶 封装的很好