Listview(黑名单)&sqlite(sql+api SqliteDataBase SqltieOpenHelper)
2016-06-10 23:26
483 查看
黑名单
① 创建Activity a.继承 b.重写 c.配置 d.启动② 布局
③ 事件
④ 名单的 CRUD dao 1.设计表 2.sql 3.转换成代码 4.单元测试test(运行前排除bug)
sql 扎实
创建表
create table blacknumbers (id integer primary key autoincrement,number text,mode text);
添加
insert into blacknumbers (number,mode)values('10010','0');
insert into blacknumbers (number,mode)values('10086','1');
删除
delete from blacknumbers where number='10010';
查询
select * from blacknumbers order by id desc;
select id from blacknumbers where number='10010';
<span style="font-size:14px;">public class BlackNumberDao { private Context context; private MyHeleper mMyHeleper; public BlackNumberDao(Context context) { super(); this.context = context; mMyHeleper = new MyHeleper(context); } // ④ 名单的 CRUD dao 1.设计表 2.sql 3.转换成代码 4.单元测试test(运行前排除bug) // // sql 扎实 // // 创建表 private class MyHeleper extends SQLiteOpenHelper { public MyHeleper(Context context) { // super(context, 数据库名, 游标工厂 null, 版本号); super(context, "blacknumbers.db", null, 1); } // 条件:创建表 @Override public void onCreate(SQLiteDatabase db) { // String sql = "create table blacknumbers (id integer primary key autoincrement,number text,mode text);"; db.execSQL(sql); // } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub } } // 添加 // insert into blacknumbers (number,mode)values('10010','0'); // insert into blacknumbers (number,mode)values('10086','1'); /** * 添加 * * @param number * @param mode */ public void add(String number, String mode) { // 获取实例 SQLiteDatabase db = mMyHeleper.getWritableDatabase(); // insert into blacknumbers (number,mode)values('10010','0'); ContentValues values = new ContentValues();// map 支持 key-value values.put("number", number); values.put("mode", mode); db.insert("blacknumbers", "", values); // 关闭 db.close(); } // // 删除 // delete from blacknumbers where number='10010'; // public void delete(String number) { // 获取实例 SQLiteDatabase db = mMyHeleper.getWritableDatabase(); String sql = "delete from blacknumbers where number=?;"; db.execSQL(sql, new String[] { number }); // 关闭 db.close(); } // 查询 // select * from blacknumbers order by id desc; public List<BlackNumberInfo> findAll() { // 获取实例 SQLiteDatabase db = mMyHeleper.getWritableDatabase(); List<BlackNumberInfo> list = new ArrayList<BlackNumberInfo>(); String sql = "select * from blacknumbers order by id desc;"; Cursor cursor = db.rawQuery(sql, new String[] {}); while (cursor.moveToNext()) { BlackNumberInfo bean = new BlackNumberInfo(); bean.id = cursor.getInt(cursor.getColumnIndex("id")); bean.number = cursor.getString(cursor.getColumnIndex("number")); bean.mode = cursor.getString(cursor.getColumnIndex("mode")); list.add(bean); } cursor.close(); // 关闭 db.close(); return list; } /** * 已经拉黑 * @param number * @return */ public boolean isExist(String number) { // 获取实例 SQLiteDatabase db = mMyHeleper.getWritableDatabase(); String sql = "select id from blacknumbers where number=?;"; Cursor cursor = db.rawQuery(sql, new String[] { number }); boolean flag = false; if (cursor.getCount() > 0) { flag = true; } cursor.close(); // 关闭 db.close(); return flag; } }</span>
⑤ 优化:a.性能 b.体验 1.无数据提示 2.查询等待的提示
<span style="font-size:14px;">// ---start View view =null; ViewHolder holder=null; if(convertView==null) { //setAdapter //将xml转换成View对象 消耗内容 创建了对象 Log.i("wzx", "将xml转换成View对象 消耗内容 创建了对象"); view= View.inflate(getBaseContext(), R.layout.view_item_blacknumber, null); holder=new ViewHolder(); //优化findViewById holder. title = (TextView) view.findViewById(R.id.title); holder. mode = (TextView) view.findViewById(R.id.mode); holder. delete = (Button) view.findViewById(R.id.delete); view.setTag(holder);//tag View成员变量Object get set方法 }else//缓存视图不为空 { Log.i("wzx", "不断重用 节省内容"); view=convertView; holder=(ViewHolder) view.getTag(); }</span>
⑥ 对话框 :将视图对象以弹出方式来显示的对象
1.布局
2.AlertDialog.Builder
3.数据保存
抽取代码 Ctrl+shift+M
<span style="font-size:14px;">@OnClick(R.id.add) public void add(View view) { // 创建 视图 View diaglogView = View.inflate(this, R.layout.view_dialog_add_number, null); // AlertDialog.Builder buidler = new AlertDialog.Builder(BlackNumberActivity.this); buidler.setTitle(null);// // buidler.setView(diaglogView); final AlertDialog dialog = buidler.create(); dialog.show(); final Button ok = (Button) diaglogView.findViewById(R.id.ok); final Button cancle = (Button) diaglogView.findViewById(R.id.cancle); final EditText phone = (EditText) diaglogView.findViewById(R.id.phone); final CheckBox call_checkbox = (CheckBox) diaglogView.findViewById(R.id.call_checkbox); final CheckBox sms_checkbox = (CheckBox) diaglogView.findViewById(R.id.sms_checkbox); cancle.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); } }); ok.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 较验 String inputPhone = phone.getText().toString().trim(); if ("".equals(inputPhone)) { Toast.makeText(getBaseContext(), "号码不能为空", 0).show(); return; } boolean modecall = call_checkbox.isChecked(); boolean modesms = sms_checkbox.isChecked(); if (!modecall && !modesms) { Toast.makeText(getBaseContext(), "至少选中一个模式", 0).show(); return; } BlackNumberInfo bean = new BlackNumberInfo(); bean.number = inputPhone; if (modecall && modesms) { bean.mode = "2"; } else if (modecall && !modesms) { bean.mode = "0"; } else if (!modecall && modesms) { bean.mode = "1"; } // 保存到数据库 if (dao.isExist(inputPhone))// 存在 { Toast.makeText(getBaseContext(), "已经拉黑该号码", 0).show(); return; } else { // 保存数据 dao.add(bean.number, bean.mode); // 添加第一个位置 list.add(0, bean); // 刷新 showListByListView(); } dialog.dismiss(); } }); }</span>
⑦ 删除
a.找到控件 写事件监听
b.从数据库删除
c.从集合删除
d.调用列表刷新
【visible与gone差别】
不可见 | invisible | 占用空间 |
不可见 | gone | 不占空间 |
可见 | visible | |
⑧ 编辑模式
a.添加点击事件
b.弹出编辑 只可编辑模式
c.更新数据库
d.更新集合
不可见 | invisible | 占用空间 |
不可见 | gone | 不占空间 |
可见 | visible |
<span style="font-size:14px;">ok.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { boolean isCheckCall = call_checkbox.isChecked(); boolean isCheckSms = sms_checkbox.isChecked(); String mode = ""; if (!isCheckCall && !isCheckSms) { Toast.makeText(getBaseContext(), "必选一项", 0).show(); return; } if (isCheckCall && isCheckSms) { mode = "2"; } else if (isCheckCall && !isCheckSms) { mode = "0"; } else if (!isCheckCall && isCheckSms) { mode = "1"; } // c.更新数据库 dao.update(info.number, mode); // d.更新集合 info.mode=mode; //集合改变:1.个数变化 2.内容 (属性) // e.更新ui ListView notifyDataSetChanged if(adapter!=null) { adapter.notifyDataSetChanged(); } dialog.dismiss(); } });</span>
【事件抢夺问题】
相关文章推荐
- hadoop操作mysql
- Hadoop Hive sql语法详解
- 使用PL/SQL Developer 登陆 oracle 11g 64位数据库
- mysql主从同步失败Last_IO_Error: Got fatal error 1236 from master解决方法
- ERROR 1010 (HY000): Error dropping database (can't rmdir '.\qpweb', errno: 41) MySQL删库失败问题的解决
- PL/SQL Developer 如何显示行号
- <Hadoop>Hive(Mysql) 安装
- crontab 定时 hive2Mysql4sqoop
- MySQL 高可用架构在业务层面细化分析研究
- sqoop导入错误:Hive does not support the SQL type for column col_name
- sql语句中----删除表数据drop、truncate和delete的用法
- 解决Win版 PLSQL Developer(32位)在Windows 64位机器安装出现的问题
- HBase 0.98 分布式集群安装详解
- MySQL管理之道:性能调优、高可用与监控内置脚本
- mysql架构解析
- mysql open_files_limit值更改无效
- sqoop把mysql导入hive时报错:Could not load org.apache.hadoop.hive.conf.HiveConf.
- SQL truncate 、delete与drop区别
- Django1.96使用mysql数据库
- 解决PL/SQL Developer查询结果乱码