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

    最近在实现收货地址功能,用到了省市区三级联动效果,网上找到一般都是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就可以了
附上完整版DemoSQL
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值