[android] 手机卫士黑名单功能(列表展示)
先把要拦截的电话号码保存到数据库中,拦截模式用个字段区分,1 电话拦截,2 短信拦截,3全部拦截
新建Activity类CallSmsSafeActivity.java
新建布局文件activity_call_sms_safe.xml
列表展示所有的黑名单手机号码
在布局文件中添加<ListView>控件,定义一个id
获取ListView对象
调用ListView对象的setAdapter()方法,参数:ListAdapter对象
定义内部类CallSmsSafeAdapter继承系统的BaseAdapter
实现四个方法,重要的有两个getCount()和getView()
实现getCount()方法,返回集合的长度
实现getView()方法
调用View.inflate()方法,转换布局文件为View对象,参数:上下文,布局资源,null
查找到相应的控件,设置文件
数据库操作
在db包下新建一个BlackNumberDBOpenHelper类继承SQLiteOpenHelper类
实现构造方法
调用父类的构造方法,super(),参数:上下文,数据库名称,游标工厂(null),版本号(1)
重写onCreate()方法,传递进来参数SQLiteDatabase对象
调用SQLiteDatabase对象的execSQL()方法,参数:String的sql语句(例如:create table blacknumber (id integer primary key autoincrement,phone varchar(20) ,mode varchar(2)) )
重写onUpgrade()方法
dao类
在db.dao包下新建一个BlackNumberDao类
定义构造方法,传递进来参数:Context对象
获取BlackNumberDBOpenHelper对象,参数:Context对象
查询单条
定义方法find(),查询一条记录,参数:String类型电话号码
调用helper对象的getReadableDatabase()方法,获取到SQLiteDatabase对象
调用SQLiteDatabase对象的rawQuery()方法,获取到Cursor对象,参数:String类型SQL语句,String[]参数值数组
调用Cursor对象的moveToNext()方法,如果为真,说明有数据,
调用Cursor对象的getString()方法,获取到值,参数:字段索引
返回Map集合
查询全部
定义方法findAll(),查询全部数据
调用helper对象的getReadableDatabase()方法,获取到SQLiteDatabase对象
调用SQLiteDatabase对象的rawQuery()方法,获取到Cursor对象,参数:String类型SQL语句
新建一个domain包,新建一个业务bean,BlackNumberInfo类
while循环Cursor对象调用moveToNext()
返回List集合
插入一条
定义方法add(),插入一条记录,参数:String电话号码,String的mode模式
调用helper对象的getWritableDatabase()方法,获取到SQLiteDatabase对象
调用SQLiteDatabase对象的insert()方法,插入一条记录,参数:String表名,允许为null的列,ContentValues对象
获取ContentValues对象,new出来
调用ContentValues对象的put()方法,参数:key,value
修改记录
定义方法update(),修改记录,参数:String电话号码,String的mode模式
调用helper对象的getWritableDatabase()方法,获取到SQLiteDatabase对象
调用SQLiteDatabase对象的update()方法,修改表记录,参数:String表名,ContentValues对象,String的条件(“number=?”),String[]参数值数组
删除记录
定义delete()方法,删除记录,参数:String电话号码
调用helper对象的getWritableDatabase()方法,获取到SQLiteDatabase对象
调用SQLiteDatabase对象的delete()方法,删除表记录,参数:String表名,String的条件(“number=?”),String[]参数值数组
调用SQLiteDatabase对象的close()方法,关闭数据库
CallSmsSafeActivity.java
package com.qingguow.mobilesafe; import java.util.List; import java.util.Map; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ListView; import android.widget.TextView; import com.qingguow.mobilesafe.db.ado.BlackNumberAdo; /** * 通讯卫士 * * @author taoshihan * */ public class CallSmsSafeActivity extends Activity { private ListView listview; private List<Map<String, String>> infos; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_call_sms_safe); listview = (ListView) findViewById(R.id.lv_blacknumber); BlackNumberAdo ado = new BlackNumberAdo(this); infos = ado.findAll(); listview.setAdapter(new MyAdapter()); // //添加100条测试数据 // Random random=new Random(); // for(int i=1;i<=100;i++){ // ado.add("18805419000"+i, String.valueOf(random.nextInt(3)+1)); // } } private class MyAdapter extends BaseAdapter { @Override public int getCount() { // TODO Auto-generated method stub return infos.size(); } @Override public View getView(int position, View convertView, ViewGroup parent) { View view = View.inflate(CallSmsSafeActivity.this, R.layout.list_call_sms_safe_item, null); TextView phoneView = (TextView) view .findViewById(R.id.tv_main_phone); TextView modeView = (TextView) view .findViewById(R.id.tv_block_mode); phoneView.setText(infos.get(position).get("phone")); switch (infos.get(position).get("mode")) { case "1": modeView.setText("电话拦截"); break; case "2": modeView.setText("短信拦截"); break; case "3": modeView.setText("全部拦截"); break; default: break; } return view; } @Override public Object getItem(int position) { // TODO Auto-generated method stub return null; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return 0; } } }
BlackNumberAdo.java
package com.qingguow.mobilesafe.db.ado; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import com.qingguow.mobilesafe.db.BlackNumberDBOpenHelper; public class BlackNumberAdo { private BlackNumberDBOpenHelper helper; public BlackNumberAdo(Context context) { helper=new BlackNumberDBOpenHelper(context); } /** * 插入数据 * @param phone * @param mode */ public void add(String phone,String mode) { SQLiteDatabase db=helper.getWritableDatabase(); ContentValues values=new ContentValues(); values.put("phone", phone); values.put("mode", mode); db.insert("blacknumber", null, values); db.close(); } /** * 查询全部 * @return */ public List<Map<String,String>> findAll(){ SQLiteDatabase db=helper.getReadableDatabase(); Cursor cursor=db.rawQuery("select phone,mode from blacknumber", null); List<Map<String,String>> list=new ArrayList<Map<String,String>>(); while(cursor.moveToNext()){ Map<String,String> info=new HashMap<String, String>(); String phone=cursor.getString(0); String mode=cursor.getString(1); info.put("phone", phone); info.put("mode", mode); list.add(info); } cursor.close(); db.close(); return list; } /** * 修改数据 * @param phone * @param mode */ public void update(String phone,String mode) { SQLiteDatabase db=helper.getWritableDatabase(); ContentValues values=new ContentValues(); values.put("phone", phone); values.put("mode", mode); db.update("blacknumber", values,"phone=?",new String[]{phone}); db.close(); } /** * 删除数据 * @param phone */ public void delete(String phone){ SQLiteDatabase db=helper.getWritableDatabase(); db.delete("blacknumber", "phone=?", new String[]{phone}); db.close(); } }
BlackNumberDBOpenHelper.java
package com.qingguow.mobilesafe.db; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; /** * 黑名单数据库帮助类 * * @author taoshihan * */ public class BlackNumberDBOpenHelper extends SQLiteOpenHelper { public BlackNumberDBOpenHelper(Context context) { super(context, "blacknumber", null, 1); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("create table blacknumber (id integer primary key autoincrement,phone varchar(20),mode varchar(2))"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } }