杨光福-手机卫士day6

上传人:宝路 文档编号:21956149 上传时间:2017-11-25 格式:DOC 页数:28 大小:308.91KB
返回 下载 相关 举报
杨光福-手机卫士day6_第1页
第1页 / 共28页
杨光福-手机卫士day6_第2页
第2页 / 共28页
杨光福-手机卫士day6_第3页
第3页 / 共28页
杨光福-手机卫士day6_第4页
第4页 / 共28页
杨光福-手机卫士day6_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《杨光福-手机卫士day6》由会员分享,可在线阅读,更多相关《杨光福-手机卫士day6(28页珍藏版)》请在金锄头文库上搜索。

1、 手机卫士讲师:杨光福Day651_黑名单号码数据库的创建&曾删改查_401、演示金山卫士的拦截效果;2、创建手机防盗页面 CallSmsSafeActivity,并在功能清单文件注册。3、添加跳转逻辑,并实现布局文件,头部采用相对布局;4、在 com.itheima.mobile.db 目录下创建数据库打开帮助类BlackNumberDBOpenHelper,它是继承 SQLiteOpenHelper 的;5、讲解构造方法的参数和 OnCreate 方法什么时候执行;6、创建数据库的表结构/创建表 blacknumber 主键_id自增长 ,number黑名单号码,mode拦截模式:1电话拦

2、截 2短信拦截 3全部拦截db.execSQL(create table blacknumber (_id integer primary key autoincrement,number varchar(20),mode varchar(2);7、创建新包 com.itheima.mobilesafe.test 并创建测试数据类TestBlackNumberDB 继承 AndroidTestCase8、创建数据库方法 testCreateDB()public void testCreateDb()BlackNumberDBOpenHelper helper = new BlackNumber

3、DBOpenHelper(getContext();helper.getWritableDatabase();9、测试报错后,添加测试框架相关参数;测试框架(放在 manifest 根节点)依赖库(放在 application 里面)运行测试代码,查看是否已经成功创建数据库,导出用工具打开查看列表信息;10、数据的增、删、改、查的实现 com.itheima.mobilesafe.db.dao创建类 BlackNumberDao 在里面实现增删改查;A:在构造方法里创建数据库;helper = new BlackNumberDBOpenHelper(context);B:数据库的添加 add(

4、String number,String mode)SQLiteDatabase db= helper.getWritableDatabase();ContentValues values = new ContentValues();values.put(number, number);values.put(mode, mode);/第二个参数:当内容为空时db.insert(blacknumber, null, values);db.close();nullColumnHack当 values 参数为空或者里面没有内容的时候,insert 是会失败的(底层数据库不允许插入一个空行),为了防止

5、这种情况,要在这里指定一个列名,到时候如果发现将要插入的行为空行时,就会将你指定的这个列名的值设为 null,然后再向数据库中插入。通过观察源码的 insertWithOnConflict 方法可以看到当 ContentValues 类型的数据 initialValues 为 null 或 size findAll()List infos = new ArrayList();SQLiteDatabase database = helper.getWritableDatabase();Cursor cursor = database.query(blacknumber, new Stringnu

6、mber,mode, null, null, null, null, null);while(cursor.moveToNext()BlackNumberInfo info = new BlackNumberInfo();String number = cursor.getString(0);String mode = cursor.getString(1);info.setMode(mode);info.setNumber(number);infos.add(info);cursor.close();database.close();return infos;3.初始化 ListView 显

7、示数据初始化数据dao= new BlackNumberDao(this);list = dao.findAll();数据显示:public int getCount() / TODO Auto-generated method stubreturn list.size();public View getView(int position, View convertView, ViewGroup parent) TextView view = new TextView(getApplicationContext();view.setText(list.get(position).toStrin

8、g();return view;运行演示测试效果53_ListView 的简单优化_351、自定义每条的样式创建相对布局文件 list_callsmssafe_item.xml 5、代码配合处理ll_loading.setVisibility(View.VISIBLE);/没数据的时候显示ll_loading.setVisibility(View.INVISIBLE);/数据加载好了隐藏55_ListView 的数据分批加载_411、讲解分批加载的好处:不用等待太久、节约流量、慢慢引导用户看感兴趣内容;2、导出数据库,打开数据库的分批查询,写 SQL 语句:select number ,mod

9、e from blacknumber limit 10 offset 10 /查询部分的数据基于 findAll()修改public List findPart(int startIndex)try Thread.sleep(600); catch (InterruptedException e) / TODO Auto-generated catch blocke.printStackTrace();List infos = new ArrayList();SQLiteDatabase database = helper.getWritableDatabase();Cursor cursor

10、 = database.rawQuery(select number ,mode from blacknumber limit 20 offset ?, new StringstartIndex+);while(cursor.moveToNext()BlackNumberInfo info = new BlackNumberInfo();String number = cursor.getString(0);String mode = cursor.getString(1);info.setMode(mode);info.setNumber(number);infos.add(info);cu

11、rsor.close();database.close();return infos;然后使用,运行演示;3、监听拖动到末尾lv_call_sms_safe.setOnScrollListener(new OnScrollListener() /* 当滚动状态发 生改变的时候调用这个方法* 静止-滚动* 滚动-静止* 手指触摸滑动 -惯性滚动*/Overridepublic void onScrollStateChanged(AbsListView view, int scrollState) switch (scrollState) case OnScrollListener.SCROLL_

12、STATE_IDLE:/空闲状态int position = lv_call_sms_safe.getLastVisiblePosition();/19 最后一条显示的位置int total = list.size();/20总的数据有多少if(position = (total-1)/最后一条了,该去加数据了Toast.makeText(getApplicationContext(), 加载更多数据 , 0).show();break;case OnScrollListener.SCROLL_STATE_FLING:/惯性滑动break;case OnScrollListener.SCROL

13、L_STATE_TOUCH_SCROLL:/触摸滚动default:break;/* 当滚动的时 候调用该方法*/Overridepublic void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) );4、加载数据,抽取线程代码为方法fillData()、指定加载位置定义成类的成员变量startIndex,然后在监听到末尾处加载数据。定义类的成员变量:private int startIndex = 0;加载数据:if(position = (total-1)

14、/最后一条了,该去加重数据了Toast.makeText(getApplicationContext(), “加载”, 0).show();/ startIndex = startIndex +20;ll_loading.setVisibility(View.VISIBLE);/显示加载startIndex += 20;fillData();5、处理数据被覆盖的问题在 fillData()方法里面代码修改:if(list = null)list = dao.findPart(startIndex);/查询数据库得到数据else/已经有数据了list.addAll(dao.findPart(st

15、artIndex);6、让数据继续停留在当前位置两种实现方式第一种:lv_call_sms_safe .setSelection(startIndex);/不推荐第二种:重复利用适配器,数据变化通知一下就行了private CallSmsSafeAdapter adapter;Handler 里面修改成:if(adapter = null)adapter = new CallSmsSafeAdapter();lv_call_sms_safe.setAdapter(adapter);else/通知数据适配器更新一下界面adapter.notifyDataSetChanged();7、防止重复加载

16、定义成员变量private boolean isLoading = false; 在加载的过程中if(isLoading)return; isLoading = true;加载好后 handler 里面处理isLoading = false;8、处理拖动到所有数据的最后一条时的处理得到数据库一共有多少条数据/*得到数据的总数* return*/public int getTotalCount()int count = 0;SQLiteDatabase database = helper.getWritableDatabase();Cursor cursor = database.rawQuery(select count(*) from b

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号