activity_mian.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.hanqi.blacklist.MianActivity"
android:orientation="vertical"> <ListView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:id="@android:id/list"
>
</ListView>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@android:id/empty"
android:layout_weight="1"
android:gravity="center"
android:text="还没有一个黑名单"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="添加"
android:onClick="bt1_onclick"/>
</LinearLayout>

DBHelper.java

package com.hanqi.blacklist;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log; /**
* Created by Administrator on 2016/4/15.
*/
public class DBHelper extends SQLiteOpenHelper {
public DBHelper(Context context) {
super(context,"blacklist.db", null, 1);
} @Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table black_number (_id integer primary key autoincrement, phone_nubmer varchar)"); Log.e("TAG","onCreate"); } @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { }
}

BlackNumber.java

package com.hanqi.blacklist;

/**
* Created by Administrator on 2016/4/15.
*/
public class BlackNumber {
private long id;
private String phonenumber; public long getId() {
return id;
} public void setId(long id) {
this.id = id;
} public String getPhonenumber() {
return phonenumber;
} public void setPhonenumber(String phonenumber) {
this.phonenumber = phonenumber;
} public BlackNumber() {
} public BlackNumber(long id, String phonenumber) {
this.id = id;
this.phonenumber = phonenumber;
} public BlackNumber(String phonenumber) {
this.phonenumber = phonenumber;
} @Override
public String toString() {
return "BlackNumber{" +
"id=" + id +
", phonenumber='" + phonenumber + '\'' +
'}';
}
}

BlackNumberDAO.java

package com.hanqi.blacklist;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log; import java.util.ArrayList;
import java.util.List; /**
* Created by Administrator on 2016/4/15.
*/
public class BlackNumberDAO { private DBHelper dbHelper;
//初始化工具类
public BlackNumberDAO(Context context)
{
dbHelper = new DBHelper(context);
} //增
public void insert(BlackNumber blackNumber)
{
//获取数据库连接
SQLiteDatabase sql = dbHelper.getWritableDatabase();
//要添加数据的键值对集合
ContentValues contentValues =new ContentValues(); contentValues.put("phone_number",blackNumber.getPhonenumber());
//数据添加
sql.insert("black_number",null,contentValues);
//关闭数据库
sql.close(); Log.e("TAG","添加数据成功"); }
//删除
public void delete(long id)
{
//获取数据库连接
SQLiteDatabase sql = dbHelper.getWritableDatabase(); //数据删除
sql.delete("black_number","_id=?",new String[]{String.valueOf(id)});
//关闭数据库
sql.close(); Log.e("TAG","删除数据成功"); }
//改
public void update(BlackNumber blackNumber)
{
//获取数据库连接
SQLiteDatabase sql = dbHelper.getWritableDatabase();
//要添加数据的键值对集合
ContentValues contentValues =new ContentValues(); contentValues.put("phone_number", blackNumber.getPhonenumber());
//数据修改
sql.update("black_number",contentValues,"_id=?",new String[]{String.valueOf(blackNumber.getId())});
//关闭数据库
sql.close(); Log.e("TAG","修改数据成功"); }
//查
//用list<实体类的实例>返回数据
public List<BlackNumber> getAll()
{
List<BlackNumber> rtn = new ArrayList<BlackNumber>();
//查询数据 //获取数据库连接
SQLiteDatabase sql = dbHelper.getWritableDatabase();
//返回游标
Cursor cursor = sql.query("black_number", null, null, null, null, null, "_id desc");
//移动游标,获取数据
while (cursor.moveToNext())
{
//构造实体类的实例,放入List
rtn.add(new BlackNumber(cursor.getLong(0),cursor.getString(1))); }
Log.e("TAg","记录条数 = "+cursor.getCount()); sql.close();
return rtn;
} }

MianActivity.java

package com.hanqi.blacklist;

import android.app.AlertDialog;
import android.app.ListActivity;
import android.content.DialogInterface;
import android.os.Bundle;
import android.text.InputType;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast; import java.util.List; public class MianActivity extends ListActivity { private ListView lv1;
private List<BlackNumber> data;
private BlackListAdapter dla;
private int position;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mian);
//lv1 = (ListView)findViewById(R.id.lv_1);
lv1 = getListView();
//获取数据集合
BlackNumberDAO bd = new BlackNumberDAO(this); data = bd.getAll(); dla = new BlackListAdapter();
//设置适配器
lv1.setAdapter(dla);
//设置上下文菜单的监听
lv1.setOnCreateContextMenuListener(this);
}
//上下文菜单被点击
@Override
public boolean onContextItemSelected(MenuItem item) {
final BlackNumber bn =data.get(position);
switch (item.getItemId())
{
case 0://修改
final EditText et = new EditText(this);
et.setInputType(InputType.TYPE_CLASS_PHONE);
et.setText(bn.getPhonenumber());
//弹出对话框
new AlertDialog.Builder(this)
.setTitle("修改黑名单")
.setView(et)
.setNeutralButton("取消",null)
.setPositiveButton("保存", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//获取修改后的值
bn.setPhonenumber(et.getText().toString());
//执行数据库修改操作
BlackNumberDAO bnd = new BlackNumberDAO(MianActivity.this); bnd.update(bn);
//更新集合 //bn和data里面的对象,指向同一个内存地址
//如果bn 被修改了, data里面的对象也同时
//这就是引用类型的特点
//通知刷新列表
dla.notifyDataSetChanged();
Toast.makeText(MianActivity.this, "修改成功", Toast.LENGTH_SHORT).show();
}
}) .show();
break;
case 1://删除
BlackNumberDAO bd = new BlackNumberDAO(this); //需要id 数据库删除了
bd.delete(bn.getId());
//刷新界面
data.remove(position);
//通知刷新
dla.notifyDataSetChanged();
break; }
return super.onContextItemSelected(item); } //创建上下文菜单
public void onCreateContextMenu(ContextMenu menu,View v,ContextMenu.ContextMenuInfo menuInfo)
{
super.onCreateContextMenu(menu, v, menuInfo);
menu.add(0, 0, 0, "修改"); menu.add(0,1,1,"修改");
//获取长按的适配器信息
AdapterView.AdapterContextMenuInfo acm = (AdapterView.AdapterContextMenuInfo)menuInfo;
position=acm.position;
}
//列表的适配器
class BlackListAdapter extends BaseAdapter
{
@Override
public int getCount() {
return data.size();
} @Override
public Object getItem(int position) {
return data.get(position);
} @Override
public long getItemId(int position) {
return data.get(position).getId();
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
//判断可复用的视图是否为空
if(convertView == null)
{
//获取视图
convertView = View.inflate(MianActivity.this,android.R.layout.simple_list_item_1,null);
}
//给视图绑定视图
TextView tv = (TextView)convertView.findViewById(android.R.id.text1); tv.setText(data.get(position).getPhonenumber()); return convertView;
}
} public void bt1_onclick(View v)
{
final EditText editText = new EditText(this);
editText.setHint("输入电话号码");
//editText.setLayoutParams(new ActionBar.LayoutParams());
editText.setInputType(InputType.TYPE_CLASS_PHONE);
//构造在定义对话框
new AlertDialog.Builder(this)
.setTitle("添加黑名单")
.setView(editText)
.setNeutralButton("取消",null)
.setPositiveButton("保存", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//构造实体类
BlackNumber blackNumber = new BlackNumber(editText.getText().toString());
//调用DAO类,保存数据
BlackNumberDAO blackNumberDAO = new BlackNumberDAO(MianActivity.this); blackNumberDAO.insert(blackNumber);
//添加数据到集合数据集合的顶部
data.add(0,blackNumber);
//通知适配器刷新ListView
dla.notifyDataSetChanged();
Toast.makeText(MianActivity.this, "数据保存成功", Toast.LENGTH_SHORT).show();
}
})
.show();
}
}

andorid 练习之黑名单的更多相关文章

  1. 基于黑名单的xss过滤器

    /** * 类名称:AntiXssFilter * @version * 类描述:基于黑名单的xss过滤器 * @version * 创建人:xxx * @version * 创建时间:2015年11 ...

  2. druid sql黑名单 报异常 sql injection violation, part alway true condition not allow

    最近使用druid,发现阿里这个连接池 真的很好用,可以监控到连接池活跃连接数 开辟到多少个连接数 关闭了多少个,对于我在项目中查看错误 问题,很有帮助, 但是最近发现里面 有条sql语句 被拦截了, ...

  3. Andorid实现点击获取验证码倒计时效果

    这篇文章主要介绍了Andorid实现点击获取验证码倒计时效果,这种效果大家经常遇到,想知道如何实现的,请阅读本文   我们在开发中经常用到倒计时的功能,比如发送验证码后,倒计时60s再进行验证码的获取 ...

  4. Android课程---添加黑名单的练习2(课堂讲解)

    实现黑名单的添加.修改.查询和删除,首先得有封装的3个类,便于使用 BlackNumber.java package com.hanqi.test3; /** * Created by Adminis ...

  5. Android课程---添加黑名单的练习(课堂讲解)

    DBHelper.java package com.hanqi.test3; import android.content.Context; import android.database.sqlit ...

  6. [WebServer] Tomcat 配置访问限制:访问白名单和访问黑名单

    前言: 昨天配置了 Tomcat 服务器运行 PHP 的环境,但是通过观察 Tomcat 这几天的日志发现,有很多莫名其妙的 IP 访问主机下莫名其妙的地址,如:/80./testproxy.php. ...

  7. Android——黑名单

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...

  8. 大规模IP地址黑名单高性能查询实现

    嗯……前阵子接了个活儿,需要做一个基于IP地址黑名单的分流网关.刚接到的时候心想iptables不就行了么,没想到一看客户给的IP黑名单规模……我擦……上亿个…… 黑名单到了这个规模,就不得不考虑下优 ...

  9. 第一章 Andorid系统移植与驱动开发概述 - 读书笔记

    Android驱动月考1 第一章 Andorid系统移植与驱动开发概述 - 读书笔记 1.Android系统的架构: (1)Linux内核,Android是基于Linux内核的操作系统,并且开源,所以 ...

随机推荐

  1. 函数调用方式__stdcall、__cdel

    函数调用方式关系对比如下: 关键字 调用规则 参数传递方向 返回 参数寄存器 堆栈的清除 __cdecl C语言 从右向左 EAX 无 调用者 __stdcall Win32标准  从右向左 EAX ...

  2. 五、Spring ——单元测试

    1.JUnit4 JUnit测试用例的完整生命周期要经历一下阶段:类级初始化资源处理,方法级初始化资源处理.执行测试用例中的方法.方法级销毁资源处理.类级销毁资源处理. 测试方法 @Test 初始化 ...

  3. shell终极操作

    1.安装zsh Mac : 直接看下一节 Redhat/centos :sudo yum install zsh Ubuntu :sudo apt-get install zsh 2.安装oh my ...

  4. C语言操作mysql

    php中 mysqli, pdo 可以用 mysqlnd 或 libmysqlclient 实现 前者 从 php 5.3.0起已内置到php中, 并且支持更多的特性,推荐用 mysqlnd mysq ...

  5. Java 程序优化:字符串操作、基本运算方法等优化策略(二)

    五.数据定义.运算逻辑优化 多使用局部变量 调用方法时传递的参数以及在调用中创建的临时变量都保存在栈 (Stack) 里面,读写速度较快. 其他变量,如静态变量.等,都在堆实例变量 (heap) 中创 ...

  6. VPS及LNMP(一)

    1.试用了搬瓦工.interserver.天翼云.网安互联之后,分别写下感受: 前两个是美国服务器,天翼云是国内服务器,网安互联是香港主机. a.搬瓦工非常便宜,512M的1年9.99刀,但是用了之后 ...

  7. Linux下的shell编程(一)BY 四喜三顺

    Ctrl + Alt + Tvim文本编辑器:i(插入模式),v(可视模式),Esc(普通模式),:w(保存),:r(打开),:q(退出)gvim 文本编辑器vim的升级版gedit 更常用的文本编辑 ...

  8. 在c中保存状态

    1. 注册表 注册表是一个普通的table,我们可以将c函数中需要保存的状态都存储在注册表中,注册表是可以被多个c模块共享的. 由于注册表是一个普通table,我们同样可以在栈中对其进行操作,只是这个 ...

  9. jquery 点击事件

    bind() 向匹配元素附加一个或更多事件处理器 blur() 触发.或将函数绑定到指定元素的 blur 事件 change() 触发.或将函数绑定到指定元素的 change 事件 click() 触 ...

  10. jquery radio取值,checkbox取值,select取值及选中

    jquery radio取值,checkbox取值,select取值,radio选中,checkbox选中,select选中,及其相关 获取一组radio被选中项的值 var item = $('in ...