WheelView实现省市区三级联动(数据库实现版本附带完整SQL及数据)

来源:互联网 发布:淘宝商品有质量问题 编辑:程序博客网 时间:2024/06/15 06:30

    最近在实现收货地址功能,用到了省市区三级联动效果,网上找到一般都是xml或json,数据源陈旧修改麻烦,修改了一下使用数据库方式实现了一下

   数据源解决,由于数据量比较大通过初始化批量执行SQL的方式不合适,费时不说还容易出错,我采用的是在电脑上创建好数据库然后把数据库文件放到程序里边,通过下面这个方法可以把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;    }

有了数据源工作就完成了三分之二了,通过继承AbstractWheelTextAdapter实现自己的适配器以省为例
/** * 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
4 1