结构

1:Android中数据库的创建2:ListView的优化3:数据库的分页查询以及ListView分页展示

1:Android中数据库的创建

1:写类继承SQLiteOpenHelper    public class BlackNamedb extends SQLiteOpenHelper{    public BlackNamedb(Context context) {        super(context, "blackname.db", null, 1);    }    @Override    public void onCreate(SQLiteDatabase sqLiteDatabase) {        //执行SQL语句        sqLiteDatabase.execSQL("create table blackname" +                "(_id integer primary key autoincrement,phone varchar(20),mode integer);");    }    @Override    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i2) {    }}2:重新写类私有化构造方法3:申明一个静态的当前类对象3:提供一个静态方法如果当前类的对象为空则要创建一个新的对象    public class BlacknameJDBC {    private final BlackNamedb blackNamedb;    //1:私有化构造方法    private BlacknameJDBC(Context context) {        blackNamedb = new BlackNamedb(context);    }    //2:申明当前类的对象。必须是静态的    private static BlacknameJDBC blacknameJDBC = null;    //3:提供一个静态方法如果当前类的对象为空则要创建一个新的对象    public static BlacknameJDBC getInstance(Context context){        if (blacknameJDBC==null){            blacknameJDBC = new BlacknameJDBC(context);            return blacknameJDBC;        }else {            return blacknameJDBC;        }    }4:提供增删改查等操作     /**     *     * @param phone 拦截的电话     * @param mode 拦截的类型 1是短信  2是电话  3是所有     */    public void insert(String phone , String mode){        //开启数据库做写入操作        SQLiteDatabase writableDatabase = blackNamedb.getWritableDatabase();        //准备ContentValues 封装        ContentValues values = new ContentValues();        values.put("phone",phone);        values.put("mode",mode);        //进行写入操作 方法接收参数(表的名称,没有给值时,将null插入数据库,内容 ContentValues 用这个封装);        writableDatabase.insert("blackname",null,values);        blackNamedb.close();    }    /**     *     * @param phone  想要删除的电话号码     */    public void delect(String phone){        SQLiteDatabase writableDatabase = blackNamedb.getWritableDatabase();        //进行删除操作(表的名称,要删除的字段名称,要删除的字段值,要使用String类型的数组)        writableDatabase.delete("blackname","phone=?",new String[]{phone});        writableDatabase.close();    }    /**     *  根据电话号码去更新拦截模式     * @param phone 要更新的电话     * @param mode 要更新为的模式(1:短信 2:电话    3:拦截所有(短信+电话)     */    public void updata(String phone,String mode){        SQLiteDatabase writableDatabase = blackNamedb.getWritableDatabase();        //准备数据        ContentValues values = new ContentValues();        values.put("mode",mode);        //  ava.lang.String table, android.content.ContentValues values, java.lang.String whereClause, java.lang.String[] whereArgs        //进行更新操作(表的名称,要更新的值,要更新的字段,依据什么字段更新)        writableDatabase.update("blackname",values,"mode=?",new String[]{phone});        writableDatabase.close();    }    /**     * 返回的就是数据库中所有的号码以及类型     */    public List FindAll(){        SQLiteDatabase writableDatabase = blackNamedb.getWritableDatabase();        //查询(表名,查询的字段,查询的条件,查询的条件,查询的条件,查询的条件,  查询出来排序的方法 默认为正序,desc为倒叙)        //拿到游标        Cursor query = writableDatabase.query("blackname", new String[]{"phone", "mode"}, null, null, null, null, "_id desc");        //创建一个集合        List blackname = new ArrayList();        while (query.moveToNext()){            //生成一个BIN类放常用字段            Blacknamebin blacknamebin = new Blacknamebin();            blacknamebin.phone = query.getString(0);            blacknamebin.mode = query.getString(1);            System.out.println("blacknamebin.phone"+query.getString(0)+"````````````blacknamebin.mode"+query.getString(1));            blackname.add(blacknamebin);        }        query.close();        writableDatabase.close();        return blackname;    }    public List FindOther(int index){        SQLiteDatabase writableDatabase = blackNamedb.getWritableDatabase();        Cursor query = writableDatabase.rawQuery("select phone,mode from blackname order by _id desc limit ?,10;", new String[]{index+""});        List blackname = new ArrayList();        while (query.moveToNext()){            //生成一个BIN类放常用字段            Blacknamebin blacknamebin = new Blacknamebin();            blacknamebin.phone = query.getString(0);            blacknamebin.mode = query.getString(1);            System.out.println("blacknamebin.phone"+query.getString(0)+"````````````blacknamebin.mode"+query.getString(1));            blackname.add(blacknamebin);        }        query.close();        writableDatabase.close();        return blackname;    }    public int getCount(){        SQLiteDatabase writableDatabase = blackNamedb.getWritableDatabase();        Cursor cursor = writableDatabase.rawQuery("select count(*) from blackname;", null);        int count =0 ;        if (cursor.moveToNext()){            count = cursor.getInt(0);        }        cursor.close();        writableDatabase.close();        return count;    }}

2:ListView的优化

    listView优化        1:复用convertView        2:复用ViewHolder让其减少findViewById()次数        3:static ViewHolder        4:分页算法模版代码        ViewHolder  viewHolder = null;    if(convertView == null){        viewHolder = new ViewHolder();        convertView = View.inflate();        viewHolder.text1 = convertView.findViewById(R.id.text1);        convertView.setTag(viewHolder);    }else{        viewHolder = (ViewHolder)convertView.getTag();    }    viewHolder.text1.setText("文本内容");    static class ViewHolder{        TextView text1;    }

3:数据库的分页查询以及ListView分页展示

1:数据库查询指定数据写法        public List FindOther(int index){        SQLiteDatabase writableDatabase = blackNamedb.getWritableDatabase();        Cursor query = writableDatabase.rawQuery("select phone,mode from blackname order by _id desc limit ?,10;", new String[]{index+""});        List blackname = new ArrayList();        while (query.moveToNext()){            //生成一个BIN类放常用字段            Blacknamebin blacknamebin = new Blacknamebin();            blacknamebin.phone = query.getString(0);            blacknamebin.mode = query.getString(1);            blackname.add(blacknamebin);        }        query.close();        writableDatabase.close();        return blackname;    }2:监听ListView的滚动事件重写里面的onScrollStateChanged方法     lv_black_name.setOnScrollListener(new AbsListView.OnScrollListener() {            @Override            public void onScrollStateChanged(AbsListView absListView, int i) {                //滚动过程中状态发生改变                //SCROLL_STATE_IDLE  空闲状态                //SCROLL_STATE_TOUCH_SCROLL 拿手触摸着滚动滚动状态                // SCROLL_STATE_FLING 飞速滚动              条件:                //1:LV不能滚动                //2:最后一个条目可见(最后一个条目的索引值大于数据适配器中条目值-1)                //3:mIsload 这个是为了不重复加载                if (blacknamebins != null) {                    if (i == AbsListView.OnScrollListener.SCROLL_STATE_IDLE &&                            lv_black_name.getLastVisiblePosition() >= blacknamebins.size() - 1 &&                            !mIsload)                    {                        //mCount返回的是数据库中总条目的个数                        if (mCount>blacknamebins.size()){                            //开启线程加载数据                            new Thread(){                                @Override                                public void run() {                                    //获取数据库查询对象                                    blacknameSelect = BlacknameJDBC.getInstance(Blackname_Activity.this);                                    List moreData = blacknameSelect.FindOther(blacknamebins.size());                                    blacknamebins.addAll(moreData);                                    mHandler.sendEmptyMessage(0);                                    super.run();                                }                            }.start();                        }                    }                }            }            @Override            public void onScroll(AbsListView absListView, int i, int i2, int i3) {                //滚动过程中调用的方法            }        });3:通知数据适配器实时刷新调用API                    if (mAdapter!=null){                        mAdapter.notifyDataSetChanged();                    }

更多相关文章

  1. android不死服务的实现方法
  2. android 修改开关机铃声
  3. Android6.0 PackageManagerService(PMS)-安装
  4. Android(安卓)Day08四大组件之服务Service
  5. 杂乱之android的字体相关类Typeface
  6. Android常见错误之[email protected] that was originally
  7. Android中读取中文字符的文件与文件读取相关
  8. Android(安卓)Activity中启动另一应用程序的方法,无需类名
  9. android 8.0 Notification 的处理

随机推荐

  1. 也来HelloAndroid一下
  2. 如何利用google原生包在android平台上实
  3. Android要完?来看看谷歌的下一代操作系统F
  4. Android(安卓)App签名(证书)校验过程源码
  5. 【Android】android 常见性能优化笔记
  6. Android(安卓)JNI实例
  7. Android(安卓)9.0 电源管理之省电模式
  8. 解决下载Android4.0源码时遇到的问题
  9. Android(安卓)项目上线流程总结
  10. android 模块之桌面闹钟