近期在实现收货地址功能,用到了省市区三级联动效果,网上找到一般都是xml或json。数据源陈旧改动麻烦。改动了一下使用数据库方式实现了一下
数据源解决。因为数据量比較大通过初始化批量运行SQL的方式不合适,费时不说还easy出错,我採用的是在电脑上创建好数据库然后把数据库文件放到程序里边,通过以下这种方法能够把db文件复制到随意文件夹下。demo中我把文件放在了raw文件夹下
/**
*
* @param inStream
* @param fileNme 文件名称
* @param newPath 要拷贝到的目录路径
*/
public void copyFile(InputStream inStream,String fileNme, String newPath) {
try {
int bytesum = 0;
int byteread = 0;
File file = new File(newPath);
//保证目录存在
if (!file.exists()) {
file.mkdir();
}
//假设文件存在覆盖
File newFile=new File(newPath+File.separator+fileNme);
if(newFile.exists()){
newFile.delete();
newFile.createNewFile();
}
FileOutputStream fs = new FileOutputStream(newFile);
byte[] buffer = new byte[1024 * 2];
int length;
while ((byteread = inStream.read(buffer)) != -1) {
bytesum += byteread; //字节数 文件大小
System.out.println(bytesum);
fs.write(buffer, 0, byteread);
}
inStream.close();
fs.close();
} catch (Exception e) {
System.out.println("拷贝文件操作出错");
e.printStackTrace();
}
}
有了数据库文件仅仅须要通过下面方法就能够对该数据库做操作了,该方法返回的是给定数据库的引用
/**
* 打开数据库文件
* @return
*/
public SQLiteDatabase openDataBase(){
SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(
DATABASES_DIR+DATABASE_NAME, null);
return database;
}
接下来就是查询数据源了
/**
*
* @param db
* @return 查询全部的省
*/
public List getProvice(SQLiteDatabase db){
String sql="SELECT * FROM t_address_province ORDER BY id";
Cursor cursor = db.rawQuery(sql,null);
List list=new ArrayList();
if (cursor!=null&&cursor.getCount() > 0) {
while (cursor.moveToNext()){
ProvinceModel provinceModel=new ProvinceModel();
provinceModel.ID=cursor.getString(cursor.getColumnIndex("id"));
provinceModel.NAME=cursor.getString(cursor.getColumnIndex("name"));
provinceModel.CODE = cursor.getString(cursor.getColumnIndex("code"));
list.add(provinceModel);
}
}
return list;
}
/**
* 依据省code查询全部的市
* @param db
* @param code
* @return
*/
public List getCityByParentId(SQLiteDatabase db,String code){
String sql="SELECT * FROM t_address_city WHERE provinceCode=? ORDER BY id";
Cursor cursor = db.rawQuery(sql,new String[]{code});
List list=new ArrayList();
if (cursor!=null&&cursor.getCount() > 0) {
while (cursor.moveToNext()){
CityModel cityModel=new CityModel();
cityModel.ID=cursor.getString(cursor.getColumnIndex("id"));
cityModel.NAME=cursor.getString(cursor.getColumnIndex("name"));
cityModel.CODE = cursor.getString(cursor.getColumnIndex("code"));
list.add(cityModel);
}
}
return list;
}
/**
* 依据市code查询全部的区
* @param db
* @param code
* @return
*/
public List getDistrictById(SQLiteDatabase db,String code){
String sql="SELECT * FROM t_address_town WHERE cityCode=?
ORDER BY id "; Cursor cursor = db.rawQuery(sql,new String[]{code}); List
/**
* Created by xuan on 16/1/7.
*/
public class ProvinceAdapter extends AbstractWheelTextAdapter {
public List mList;
private Context mContext;
public ProvinceAdapter(Context context,List list) {
super(context);
mList=list;
mContext=context;
}
@Override
protected CharSequence getItemText(int index) {
ProvinceModel provinceModel=mList.get(index);
return provinceModel.NAME;
}
@Override
public int getItemsCount() {
return mList.size();
}
}
再将Adapter给WheelView就能够了