andorid 练习之黑名单
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 练习之黑名单的更多相关文章
- 基于黑名单的xss过滤器
/** * 类名称:AntiXssFilter * @version * 类描述:基于黑名单的xss过滤器 * @version * 创建人:xxx * @version * 创建时间:2015年11 ...
- druid sql黑名单 报异常 sql injection violation, part alway true condition not allow
最近使用druid,发现阿里这个连接池 真的很好用,可以监控到连接池活跃连接数 开辟到多少个连接数 关闭了多少个,对于我在项目中查看错误 问题,很有帮助, 但是最近发现里面 有条sql语句 被拦截了, ...
- Andorid实现点击获取验证码倒计时效果
这篇文章主要介绍了Andorid实现点击获取验证码倒计时效果,这种效果大家经常遇到,想知道如何实现的,请阅读本文 我们在开发中经常用到倒计时的功能,比如发送验证码后,倒计时60s再进行验证码的获取 ...
- Android课程---添加黑名单的练习2(课堂讲解)
实现黑名单的添加.修改.查询和删除,首先得有封装的3个类,便于使用 BlackNumber.java package com.hanqi.test3; /** * Created by Adminis ...
- Android课程---添加黑名单的练习(课堂讲解)
DBHelper.java package com.hanqi.test3; import android.content.Context; import android.database.sqlit ...
- [WebServer] Tomcat 配置访问限制:访问白名单和访问黑名单
前言: 昨天配置了 Tomcat 服务器运行 PHP 的环境,但是通过观察 Tomcat 这几天的日志发现,有很多莫名其妙的 IP 访问主机下莫名其妙的地址,如:/80./testproxy.php. ...
- Android——黑名单
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...
- 大规模IP地址黑名单高性能查询实现
嗯……前阵子接了个活儿,需要做一个基于IP地址黑名单的分流网关.刚接到的时候心想iptables不就行了么,没想到一看客户给的IP黑名单规模……我擦……上亿个…… 黑名单到了这个规模,就不得不考虑下优 ...
- 第一章 Andorid系统移植与驱动开发概述 - 读书笔记
Android驱动月考1 第一章 Andorid系统移植与驱动开发概述 - 读书笔记 1.Android系统的架构: (1)Linux内核,Android是基于Linux内核的操作系统,并且开源,所以 ...
随机推荐
- CentOS 7 做服务器 CentOS 5 做客服机 搭建Apache+php+mysql网页
1:在CentOS 7搭建yum源和php.Apache 安装 yum install php-mysql -y 文件 重启httpd服务:systemctl restart httpd.ser ...
- javascript性能优化总结一(转载人家)
一直在学习javascript,也有看过<犀利开发Jquery内核详解与实践>,对这本书的评价只有两个字犀利,可能是对javascript理解的还不够透彻异或是自己太笨,更多的是自己不擅于 ...
- python中使用xlrd、xlwt操作excel表格详解
python读excel——xlrd 这个过程有几个比较麻烦的问题,比如读取日期.读合并单元格内容.下面先看看基本的操作: 首先读一个excel文件,有两个sheet,测试用第二个sheet,shee ...
- Android OpenCV 图像识别
最近打算写一个android 平台opencv 的小程序,着手查找了一下资料.网络上的资料参差不齐,有一些都比较老旧,我参考了前面的方法找到了一个简单的搭建方法,分享给大家. 0,环境的搭建: jav ...
- [ActionScript 3.0] AS3.0 烟雾粒子效果
package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Sprite; ...
- centos6.4安装VMwareTools
centos6.4安装VMware Tools,同样适用于VMware.ESXi.Hypervisor #如果文件不存在需要创建 mkdir /mnt/cdrom #挂载光驱 mount -t aut ...
- Java操作SFTP
import java.util.Properties; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.jcr ...
- 压测 linux + jexus + mono + asp.net mvc
环境: 1.centos 7 + jexus 5.8.1 + mono 4.4.2 + asp.net mvc 4 做了一点小优化: 一.调整文件描述符数量限制编辑 /etc/security/lim ...
- 五、selecting with the API
1. 命令通常从selection list中得到input, 调用MGlobal::getActiveSelectionList(MSelectionList &dest, bool ord ...
- JS转义 escape()、encodeURI()、encodeURIComponent()区别详解
JavaScript中有三个可以对字符串编码的函数,分别是: escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decod ...