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. linux -小记(3) 问题:linux 安装epel扩展源报错

    EPEL提供的软件包大多基于其对应的Fedora软件包,不会与企业版Linux发行版本的软件发生冲突或替换其文件. epel安装对应的rpm包 centos5 32位epel源下载地址: www.li ...

  2. Delphi 2010错误 "displayNotification: 内存不够"

    打开 Delphi 2010 的时候, 它报一个错误 "displayNotification: 内存不够",从而无法使用 Delphi , 解决办法 摘自http://www.cnblogs.com ...

  3. hadoop实战之分布式模式

    环境 192.168.1.101 host101 192.168.1.102 host102 1.安装配置host101 [root@host101 ~]# cat /etc/hosts |grep ...

  4. Win7 远程桌面 错误代码:5 异常处理(您的远程桌面会话即将结束 此计算机的虚拟内存可能不足。请关闭其他程序,然后重试连接远程计算机。如果问题仍然存在,请联系网络管理员或技术支持。)

    问题表现: 在用windows7 远程桌面连接其他电脑时,出现错误提示对话框—-标题为“严重错误(错误代码:5)”,内容为“您的远程桌面会话即将结束 此计算机的虚拟内存可能不足.请关闭其他程序,然后重 ...

  5. PHP入门part2

    PHP的数据类型 php数据类型分为三大类, 标量类型:整型.浮点型.布尔型和字符串型 复合类型:数组型和对象(object) 特殊类型:空类型和资源型 !资源型以后会讲 整形(int)就是整数的数值 ...

  6. 框架--NoHttp和OkHttp哪个好用,Volley和NoHttp哪个好用?

    NoHttp和OkHttp哪个好用,Volley和NoHttp哪个好用? NoHttp 源码及Demo托管在Github欢迎大家Star: https://github.com/Y0LANDA/NoH ...

  7. C# 文件大小

    /// <summary> /// 获取文件大小 /// </summary> /// <param name="sFullName">< ...

  8. 53. Minimum Window Substring

    Minimum Window Substring Given a string S and a string T, find the minimum window in S which will co ...

  9. 六、通过插件如何创建自己的MEL command

    1. MAYA API支持不同类型的plugin (1)Command Plugin——扩充MEL命令 (2)Tool Commands——通过鼠标输出 (3)DG plugin——对场景添加新的操作 ...

  10. Eclipse JSP/Servlet 环境搭建

    Eclipse JSP/Servlet 环境搭建 本文假定你已安装了 JDK 环境,如未安装,可参阅 Java 开发环境配置. 我们可以使用 Eclipse 来搭建 JSP 开发环境,首先我们分别下载 ...