好,今天我们来完成一下我们高级工具的黑名单功能,其实这个黑名单也很简单的,就是一个表记录用户标记的名单,当然有黑当然也有白啦,但是我们就不演示白名单的做法啦,都是和黑名单差不多的,你们有兴趣的可以自己完善一下。
好啦,让我们来看一下我们今天要做的效果,
我们做的是黑名单的增删改查,那么肯定就要建一个表啦
com.xiaobin.security.utils.DBHelper
package com.xiaobin.security.utils; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class DBHelper extends SQLiteOpenHelper { public DBHelper(Context context) { super(context, "security.db", null, 1); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("create table blacknumber (_id integer primary key autoincrement, number varchar(20))"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { //数据库版本发生不同的时候调用 } }
com.xiaobin.security.dao.BlackNumberDao
package com.xiaobin.security.dao; import java.util.ArrayList; import java.util.List; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import com.xiaobin.security.utils.DBHelper; public class BlackNumberDao { private DBHelper dbHelper; public BlackNumberDao(Context context) { dbHelper = new DBHelper(context); } public boolean find(String number) { boolean result = false; SQLiteDatabase db = dbHelper.getReadableDatabase(); if(db.isOpen()) { Cursor cursor = db.rawQuery("select number from blacknumber where number = ? ", new String[] {number}); if(cursor.moveToNext()) { result = true; } cursor.close(); db.close(); } return result; } public void add(String number) { find(number); SQLiteDatabase db = dbHelper.getWritableDatabase(); if(db.isOpen()) { db.execSQL("insert into blacknumber (number) values(?)", new Object[] {number}); db.close(); } } public void delete(String number) { SQLiteDatabase db = dbHelper.getWritableDatabase(); if(db.isOpen()) { db.execSQL("delete from blacknumber where number = ? ", new Object[] {number}); db.close(); } } public void update(String oldNumber, String newNumber) { SQLiteDatabase db = dbHelper.getWritableDatabase(); if(db.isOpen()) { db.execSQL("update blacknumber set number = ? where number = ? ", new Object[] {newNumber, oldNumber}); db.close(); } } public List<String> findAll() { List<String> numbers = new ArrayList<String>(); SQLiteDatabase db = dbHelper.getReadableDatabase(); if(db.isOpen()) { Cursor cursor = db.rawQuery("select number from blacknumber", null); while(cursor.moveToNext()) { numbers.add(cursor.getString(0)); } cursor.close(); db.close(); } return numbers; } }
com.xiaobin.security.ui.NumberSecurityActivity
package com.xiaobin.security.ui; import java.util.List; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.os.Bundle; import android.text.InputType; import android.text.TextUtils; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.Window; import android.widget.AdapterView.AdapterContextMenuInfo; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import com.xiaobin.security.R; import com.xiaobin.security.dao.BlackNumberDao; public class NumberSecurityActivity extends Activity { private ListView lv_number; private Button bt_number_add; private BlackNumberDao dao; private List<String> numbers; private NumberAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.number_security); dao = new BlackNumberDao(this); numbers = dao.findAll(); adapter = new NumberAdapter(); lv_number = (ListView) findViewById(R.id.lv_number); lv_number.setAdapter(adapter); //给listview注册一个上下文菜单 registerForContextMenu(lv_number); bt_number_add = (Button) findViewById(R.id.bt_number_add); bt_number_add.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { AlertDialog.Builder builder = new AlertDialog.Builder(NumberSecurityActivity.this); builder.setTitle("添加黑名单"); final EditText et_number = new EditText(NumberSecurityActivity.this); et_number.setInputType(InputType.TYPE_CLASS_PHONE); et_number.setHint("请输入黑名单号码"); builder.setView(et_number); builder.setPositiveButton("添加", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { String number = et_number.getText().toString().trim(); if(TextUtils.isEmpty(number)) { Toast.makeText(NumberSecurityActivity.this, "添加号码不能为空", Toast.LENGTH_SHORT).show(); } else { dao.add(number); numbers = dao.findAll(); adapter.notifyDataSetChanged(); } } }); builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }); builder.create().show(); } }); } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.number, menu); } @Override public boolean onContextItemSelected(MenuItem item) { //拿到点击的菜单的信息 AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); switch(item.getItemId()) { case R.id.update_number : String oldNumber = numbers.get((int) info.id); updateNumber(oldNumber); break; case R.id.delete_number : int id = (int) info.id; String number = numbers.get(id); dao.delete(number); numbers = dao.findAll(); adapter.notifyDataSetChanged(); break; default : break; } return super.onContextItemSelected(item); } private void updateNumber(final String oldNumber) { AlertDialog.Builder builder = new AlertDialog.Builder(NumberSecurityActivity.this); builder.setTitle("更新黑名单"); final EditText et_number = new EditText(NumberSecurityActivity.this); et_number.setInputType(InputType.TYPE_CLASS_PHONE); et_number.setHint("请输入新的号码"); builder.setView(et_number); builder.setPositiveButton("修改", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { String number = et_number.getText().toString().trim(); if(TextUtils.isEmpty(number)) { Toast.makeText(NumberSecurityActivity.this, "添加号码不能为空", Toast.LENGTH_SHORT).show(); } else { dao.update(oldNumber, number); numbers = dao.findAll(); adapter.notifyDataSetChanged(); } } }); builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }); builder.create().show(); } //================================================================== private class NumberAdapter extends BaseAdapter { @Override public int getCount() { return numbers.size(); } @Override public Object getItem(int position) { return numbers.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { if(convertView == null) { View view = View.inflate(NumberSecurityActivity.this, R.layout.number_security_item, null); TextView tv_item = (TextView) view.findViewById(R.id.tv_number_item); tv_item.setText(numbers.get(position)); return view; } else { TextView tv_item = (TextView) convertView.findViewById(R.id.tv_number_item); tv_item.setText(numbers.get(position)); return convertView; } } } }
今天源码下载