WheelView實現省市區三級聯動(數據庫實現版本號附帶完整SQL及數據)
近期在實現收貨地址功能。用到了省市區三級聯動效果。網上找到一般都是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<ProvinceModel> getProvice(SQLiteDatabase db){ String sql="SELECT * FROM t_address_province ORDER BY id"; Cursor cursor = db.rawQuery(sql,null); List<ProvinceModel> list=new ArrayList<ProvinceModel>(); 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<CityModel> 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<CityModel> list=new ArrayList<CityModel>(); 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<DistrictModel> 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<DistrictModel> list=new ArrayList<DistrictModel>(); if (cursor!=null&&cursor.getCount() > 0) { while (cursor.moveToNext()){ DistrictModel districtModel=new DistrictModel(); districtModel.ID=cursor.getString(cursor.getColumnIndex("id")); districtModel.NAME=cursor.getString(cursor.getColumnIndex("name")); districtModel.CODE = cursor.getString(cursor.getColumnIndex("code")); list.add(districtModel); } } return list; }
/** * Created by xuan on 16/1/7. */ public class ProvinceAdapter extends AbstractWheelTextAdapter { public List<ProvinceModel> mList; private Context mContext; public ProvinceAdapter(Context context,List<ProvinceModel> 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就能夠了 附上完整版Demo及SQL
WheelView實現省市區三級聯動(數據庫實現版本號附帶完整SQL及數據)