• 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; }

    有了数据源工作就完毕了三分之二了,通过继承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
  • 相关阅读:
    电子海图开发一百篇第五十五篇-电子江图传输规范 数据模型
    天气可视化,海浪,温度图层的绘制,温度热力图的可视化
    全球潮汐数据API使用方法,潮汐数据查询
    海洋气象数据可视化,以流场的方式显示风场图,海洋气象API使用
    g++ 编译module失败
    编译gcc error-*** LIBRARY_PATH shouldn‘t contain the current directory when *** building gcc.
    windows两种自启动的区别
    windows多线程加锁
    windows server 2012不显示此电脑
    pthread_cond_wait
  • 原文地址:https://www.cnblogs.com/yxysuanfa/p/7202401.html
Copyright © 2020-2023  润新知