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. angular+bootstrap+MVC--之一,入门

    这篇直奔MVVM主题,本例实现一个bootstrap的下拉框. 展示了如下技术: 1.MVVM绑定(事件绑定,值绑定,循环绑定,循环绑定中嵌套事件并回传item), 2.angul多module, 建 ...

  2. 关于android存储

    今天在测试android拍照功能时遇到一个困惑:照片拍成功了,程序能都能读取到,但是在手机储存中怎么也找不到拍的照片.先将学习过程中经过的曲折过程记录如下: 一:拍照并保持 通过调用android 的 ...

  3. python学习-day18、文件处理、

    4.文件操作 武sir:http://www.cnblogs.com/wupeiqi/articles/4943406.html 林海峰:http://www.cnblogs.com/linhaife ...

  4. 关于oracle修复控制文件与数据文件不一致的问题----

    本小菜鸟周末鼓捣数据库关于rman恢复与备份方面的实验,结果不知道哪根筋搭错了,手一哆嗦,做了不知道什么操作,就出现了数据库打不开的严重状态,只能开启到mount状态,但是切换到open状态时就会报错 ...

  5. 使用 Jmeter 做 Web 接口测试

    接口测试概述 定义 API testing is a type of software testing that involves testing application programming in ...

  6. 便捷的php操作mysql库MysqliDb

    github 地址:https://github.com/joshcam/PHP-MySQLi-Database-Class MysqliDb -- Simple MySQLi wrapper and ...

  7. 栅格数据处理 RasterDataset RasterLayer Raster RasterBandCollection

    1 IRasterLayer myrasterlayer = MapControl.Map.Layer[index] as IRasterLayer;2 IRaster myRaster = myra ...

  8. 检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败

    .NET导出Excel遇到的80070005错误的解决方法: 检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046}的组件时失败,原因是出 ...

  9. GitHub上一个不错的开源C#源码(控制台界面开发)

    https://github.com/flagbug/FlagConsole 如链接所示

  10. VBA_Excel_教程:变量,数组

    Sub testVar() '变量 Dim strT1 As String strT1 = "A" '常量[加不加类型都可以] Const strT2 As String = &q ...