您的位置:首页 > 数据库 > SQL

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

 
e.更新ui ListView  notifyDataSetChanged

<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>


【事件抢夺问题】
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: