Android——黑名单管理(二)
说明:多加一点完善
1.在操作类 DAO 将连接数据库也放到了构造方法中(错误),加删除全部的方法
2.主界面增加了姓名一栏,用layout文件将对话框分离出来
3.删除加确认提示
4.加删除全部按钮
BlackNumber.java
- package com.example.chenshuai.test321;
- /**
- * Created by chenshuai on 2016/4/16.
- */
- //实体类 只负责装载数据
- public class BlackNumber {
- private long id;
- private String name;
- private String phonenumber;
- //生成get和set方法
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- 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(String name, String phonenumber) {
- this.name = name;
- this.phonenumber = phonenumber;
- }
- public BlackNumber(long id,String name,String phonenumber) {
- this.id = id;
- this.name = name;
- this.phonenumber = phonenumber;
- }
- //生成tostring方法
- @Override
- public String toString() {
- return "BlackNumber{" +
- "id=" + id +
- ", name='" + name + '\'' +
- ", phonenumber='" + phonenumber + '\'' +
- '}';
- }
- }
BlackNumberDAO.java
- package com.example.chenshuai.test321;
- 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 chenshuai on 2016/4/16.
- */
- //数据库操作类
- public class BlackNumberDAO {
- private DBHelper dbHelper;
- //构造方法 初始化 操作工具类DBHelper 连接数据库
- public BlackNumberDAO(Context context)
- {
- dbHelper = new DBHelper(context);
- }
- //增
- public void insert(BlackNumber blackNumber)
- {
- //连接数据库
- SQLiteDatabase sd = dbHelper.getWritableDatabase();
- //添加数据
- ContentValues cv = new ContentValues();
- //要添加数据的键值对集合
- cv.put("name",blackNumber.getName());
- cv.put("phone_number",blackNumber.getPhonenumber());
- //数据添加
- sd.insert("black_number",null,cv);
- //关闭数据库
- sd.close();
- Log.e("TAG", "添加数据成功");
- }
- //查询
- //用List<实体类的实例>返回数据
- public List<BlackNumber> getAll()
- {
- //连接数据库
- SQLiteDatabase sd = dbHelper.getWritableDatabase();
- //List 接口 ArrayList 实现类
- List<BlackNumber> bln = new ArrayList<BlackNumber>();
- //查询数据
- //连接数据库
- //SQLiteDatabase sd = dbHelper.getWritableDatabase();
- //返回游标
- Cursor cursor = sd.query("black_number", null, null, null, null, null, "_id desc");
- //遍历 移动游标,获取数据
- while (cursor.moveToNext())
- {
- //构造实体类的实例,放入List
- bln.add(new BlackNumber(cursor.getLong(0),cursor.getString(1),cursor.getString(2)));
- }
- Log.e("TAG", "数据的记录条数" + cursor.getCount());
- sd.close();
- return bln;
- }
- //改
- public void update(BlackNumber blackNumber)
- {
- //连接数据库
- SQLiteDatabase sd = dbHelper.getWritableDatabase();
- //要添加数据的键值对集合
- ContentValues cv = new ContentValues();
- cv.put("name",blackNumber.getName());
- cv.put("phone_number",blackNumber.getPhonenumber());
- sd.update("black_number",cv,"_id=?",new String[]{String.valueOf(blackNumber.getId())});
- sd.close();
- Log.e("TAG", "修改数据成功");
- }
- //删
- public void delete(long id)
- {
- //连接数据库
- SQLiteDatabase sd = dbHelper.getWritableDatabase();
- //删除数据
- sd.delete("black_number", "_id=?", new String[]{String.valueOf(id)});
- sd.close();
- Log.e("TAG", "删除数据成功");
- }
- //全部删除
- public void deleteAll()
- {
- //连接数据库
- SQLiteDatabase sd = dbHelper.getWritableDatabase();
- //删除全部数据
- sd.delete("black_number",null,null);
- sd.close();
- Log.e("TAG", "删除数据成功");
- }
- }
- activity_activity_black_number.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.example.chenshuai.test321.Activity_blackNumber"
- 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:id="@android:id/empty"
- android:layout_width="match_parent"
- android:layout_height="0dp"
- android:layout_weight="1"
- android:text="还没有一个黑名单"
- android:textSize="30sp"
- android:gravity="center"/>
- <Button
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="添加"
- android:textSize="20sp"
- android:onClick="tianjiaonclick"/>
- <Button
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="全部删除"
- android:textSize="20sp"
- android:onClick="quanbusconclick"/>
- </LinearLayout>
- layout_duihuakuang.xml
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical">
- <TextView
- android:layout_width="match_parent"
- android:layout_height="60dp"
- android:text="添加黑名单"
- android:textSize="30dp"
- android:gravity="center_vertical"
- android:paddingLeft="20dp"
- android:id="@+id/tv_bt_1"/>
- <EditText
- android:layout_width="match_parent"
- android:layout_height="60dp"
- android:hint="输入姓名"
- android:textSize="20dp"
- android:gravity="center_vertical"
- android:paddingLeft="10dp"
- android:id="@+id/et_bt_1"
- android:inputType="text"
- />
- <EditText
- android:layout_width="match_parent"
- android:layout_height="60dp"
- android:hint="输入黑名单号"
- android:textSize="20dp"
- android:gravity="center_vertical"
- android:paddingLeft="10dp"
- android:id="@+id/et_bt_2"
- android:inputType="number"
- />
- </LinearLayout>
- layout_blacknumber_xianshi.xml
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical">
- <TextView
- android:layout_width="match_parent"
- android:layout_height="40dp"
- android:text="显示姓名"
- android:textSize="25sp"
- android:id="@+id/tv_bt_2"
- android:gravity="center_vertical"
- android:paddingLeft="10dp"
- android:layout_marginTop="10dp"
- android:background="#ADADAD"
- />
- <TextView
- android:layout_width="match_parent"
- android:layout_height="40dp"
- android:text="显示电话"
- android:textSize="20sp"
- android:id="@+id/tv_bt_3"
- android:gravity="center_vertical"
- android:paddingLeft="10dp"
- android:background="#e0e0e0"
- />
- </LinearLayout>
- Activity_blackNumber.java
- package com.example.chenshuai.test321;
- import android.app.AlertDialog;
- import android.app.ListActivity;
- import android.content.DialogInterface;
- import android.os.Bundle;
- import android.view.ContextMenu;
- import android.view.LayoutInflater;
- 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 Activity_blackNumber extends ListActivity {
- private List<BlackNumber> data;
- private listviewAdapter lad;
- private int position;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_activity_black_number);
- ListView lv_1 = getListView();
- //构建数据
- BlackNumberDAO bln = new BlackNumberDAO(Activity_blackNumber.this);
- data = bln.getAll();
- //适配器
- lad = new listviewAdapter();
- lv_1.setAdapter(lad);
- //设置上下文菜单
- lv_1.setOnCreateContextMenuListener(this);
- }
- //创建上下文菜单
- @Override
- public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
- //添加两个item
- menu.add(0,1,1,"修改");
- menu.add(0, 2, 2, "删除");
- //获取长按的适配器信息(删除要用)
- AdapterView.AdapterContextMenuInfo menuInfo1 = (AdapterView.AdapterContextMenuInfo)menuInfo;
- position = menuInfo1.position;
- super.onCreateContextMenu(menu, v, menuInfo);
- }
- //给选项加点击事件
- @Override
- public boolean onContextItemSelected(MenuItem item) {
- final BlackNumber bt = data.get(position);
- switch (item.getItemId())
- {
- //修改
- case 1:
- LayoutInflater inflater = getLayoutInflater();
- final View v = inflater.inflate(R.layout.layout_duihuakuang, null);
- final EditText et_1 = (EditText)v.findViewById(R.id.et_bt_1);
- final EditText et_2 = (EditText)v.findViewById(R.id.et_bt_2);
- //获取默认值
- et_1.setText(bt.getName());
- et_2.setText(bt.getPhonenumber());
- new AlertDialog.Builder(this)
- .setView(v)
- .setNegativeButton("取消",null)
- .setPositiveButton("确定", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- //获取修改后的值
- bt.setName(et_1.getText().toString());
- bt.setPhonenumber(et_2.getText().toString());
- //执行修改数据库操作
- BlackNumberDAO blackNumberDAO = new BlackNumberDAO(Activity_blackNumber.this);
- blackNumberDAO.update(bt);
- //更新集合
- //BlackNumber bt = data.get(position)
- //bt和data里面的对象同时指向的是同一个内存地址
- //如果bt被修改了,data里面的对象也同时发生变化
- //这就是引用类型的特点
- //通知刷新列表
- lad.notifyDataSetChanged();
- Toast.makeText(Activity_blackNumber.this, "修改成功!", Toast.LENGTH_SHORT).show();
- }
- })
- .setCancelable(false)
- .show();
- break;
- //删除
- case 2:
- new AlertDialog.Builder(this)
- .setMessage("确定要删除吗?")
- .setNegativeButton("取消",null)
- .setPositiveButton("确定", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- //在数据库删除 需要id
- BlackNumberDAO blackNumberDAO = new BlackNumberDAO(Activity_blackNumber.this);
- blackNumberDAO.delete(bt.getId());
- //刷新界面
- //移除集合中的记录
- data.remove(position);
- //通知刷新
- lad.notifyDataSetChanged();
- Toast.makeText(Activity_blackNumber.this, "删除成功", Toast.LENGTH_SHORT).show();
- }
- })
- .setCancelable(false)
- .show();
- break;
- }
- return super.onContextItemSelected(item);
- }
- //抽象类 要继承并实现抽象方法后才能使用 实现适配器
- class listviewAdapter 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)
- {
- //获取视图
- //1.获取layout文件 用加载器
- LayoutInflater layoutInflater = getLayoutInflater();
- convertView = layoutInflater.inflate(R.layout.layout_blacknumber_xianshi,null);
- }
- //给视图绑定数据
- TextView tv_1 = (TextView) convertView.findViewById(R.id.tv_bt_2);
- TextView tv_2 = (TextView) convertView.findViewById(R.id.tv_bt_3);
- tv_1.setText(data.get(position).getName());
- tv_2.setText(data.get(position).getPhonenumber());
- return convertView;
- }
- }
- //添加数据按钮
- public void tianjiaonclick(View view)
- {
- //1.获取加载器
- LayoutInflater layoutInflater = getLayoutInflater();
- //2.用加载器加载文件
- final View v = layoutInflater.inflate(R.layout.layout_duihuakuang,null);
- new AlertDialog.Builder(this)
- .setView(v)
- .setCancelable(false)
- .setNegativeButton("取消", null)
- .setPositiveButton("确定", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- EditText et_1 = (EditText)v.findViewById(R.id.et_bt_1);
- EditText et_2 = (EditText)v.findViewById(R.id.et_bt_2);
- String name = et_1.getText().toString();
- String number = et_2.getText().toString();
- //1.构造实体类 参数为输入的电话号码
- BlackNumber blackNumber = new BlackNumber(name,number);
- BlackNumberDAO blackNumberDAO = new BlackNumberDAO(Activity_blackNumber.this);
- //2.用数据库操作类 DAO 保存数据
- blackNumberDAO.insert(blackNumber);
- //添加数据到集合
- //给add添加索引值从上往下加数据
- data.add(0,blackNumber);
- //通知适配器刷新ListView
- lad.notifyDataSetChanged();
- }
- })
- .show();
- }
- //全部删除
- public void quanbusconclick(View view)
- {
- new AlertDialog.Builder(this)
- .setMessage("确定要删除吗?")
- .setNegativeButton("取消",null)
- .setPositiveButton("确定", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- //在数据库删除
- BlackNumberDAO blackNumberDAO = new BlackNumberDAO(Activity_blackNumber.this);
- blackNumberDAO.deleteAll();
- //刷新界面
- //移除集合中的记录
- while (position < data.size()) {
- data.remove(position);
- }
- //通知刷新
- lad.notifyDataSetChanged();
- Toast.makeText(Activity_blackNumber.this, "删除所有数据成功", Toast.LENGTH_SHORT).show();
- }
- })
- .setCancelable(false)
- .show();
- }
- }
Android——黑名单管理(二)的更多相关文章
- 【转】Android LCD(二):LCD常用接口原理篇
关键词:android LCD TFT TTL(RGB) LVDS EDP MIPI TTL-LVDS TTL-EDP 平台信息:内核:linux2.6/linux3.0系统:android/ ...
- 【转】android camera(二):摄像头工作原理、s5PV310 摄像头接口(CAMIF)
关键词:android camera CMM 模组 camera参数 CAMIF平台信息:内核:linux系统:android 平台:S5PV310(samsung exynos 4210) 作者 ...
- Android进阶(二十八)上下文菜单ContextMenu使用案例
上下文菜单ContextMenu使用案例 前言 回顾之前的应用程序,发现之前创建的选项菜单无法显示了.按照正常逻辑来说,左图中在"商品信息"一栏中应该存在选项菜单,用户可进行分享等 ...
- Android进阶(二十)AndroidAPP开发问题汇总(四)
· Android进阶(二十)AndroidAPP开发问题汇总(四) android:layout_width和android:width的区别 基中的android:layout_width和and ...
- Android生成二维码--保存和分享二维码图片
之前写过生成自定义二维码的两篇文章:<Android生成自定义二维码><Android生成二维码–拍照或从相册选取图片>,下面就介绍一下Android应用内如何保存以及分享二维 ...
- Android 利用二次贝塞尔曲线模仿购物车加入物品抛物线动画
Android 利用二次贝塞尔曲线模仿购物车加入物品抛物线动画 0.首先.先给出一张效果gif图. 1.贝塞尔曲线原理及相关公式參考:http://www.jianshu.com/p/c0d7ad79 ...
- Android LCD(二):LCD常用接口原理篇(转)
源: Android LCD(二):LCD常用接口原理篇
- Android Studio(二):快捷键设置、插件安装
Android Studio相关博客: Android Studio(一):介绍.安装.配置 Android Studio(二):快捷键设置.插件安装 Android Studio(三):设置Andr ...
- Android—ZXing二维码扫描遇到的问题
最近工作中需要开发带有二维码扫描功能的软件(基于开源项目ZXing),遇到的问题记录一下,也希望给大家带来帮助. 1.首先因为扫描要开摄像机所以加权限是一定的,不然后面什么都不能进行 <uses ...
随机推荐
- springcloud中服务组策与发现eureka
1 Eureka 是什么 Eureka是netflix的一个子模块,只需要使用服务的标志符,就可以访问到服务,而不需要修改服务调用的配置文件.功能类似于Dubbo的注册中心,比如Zookeeper. ...
- RocketMQ最佳实践(一)4.0版本/概念介绍/安装调试/客户端demo
为什么选择RocketMQ 我们来看看官方回答: “我们研究发现,对于ActiveMQ而言,随着越来越多的使用queues和topics,其IO成为了瓶颈.某些情况下,消费者缓慢(消费能力不足)还会拖 ...
- 【Android开发】Android Host详解(翻译自官方文档)
原文:http://android.eoe.cn/topic/summary 文档内容 API概述 Android中manifest文件需求 工作的设备 * 发现设备 * 获得和设备进行“交流”的权限 ...
- Android 源码解析:单例模式-通过容器实现单例模式-懒加载方式
本文分析了 Android 系统服务通过容器实现单例,确保系统服务的全局唯一. 开发过 Android 的用户肯定都用过这句代码,主要作用是把布局文件 XML 加载到系统中,转换为 Android 的 ...
- Atitit 大龄软件工程师的出路attilax总结
Atitit 大龄软件工程师的出路attilax总结 1.1. 创业vs打工 联合创始人 合伙人1 1.2. 项目管理 架构师1 1.3. 软件培训 讲师2 1.4. 研究院研究员2 1.5. 继续博 ...
- [svc]为何linux ext4文件系统目录默认大小是4k?
linux ext4普通盘为什么目录大小是4k? Why does every directory have a size 4096 bytes (4 K)? To understand this, ...
- SQLServer中进行sql除法运算结果为小数时显示0的解决方案
转自:http://blog.sina.com.cn/s/blog_8020e41101019k7t.html SELECT field1/field2 FROM TB; 当 field1的数值 &g ...
- 基于ASP.NET MVC的ABP框架入门学习教程
为什么使用ABP 我们近几年陆续开发了一些Web应用和桌面应用,需求或简单或复杂,实现或优雅或丑陋.一个基本的事实是:我们只是积累了一些经验或提高了对,NET的熟悉程度. 随着软件开发经验的不断增加, ...
- vscode 换行符\n 变成\r\n
VSCode是一个开源的强大代码编写器,但是如果没有好好的配置使用,会适得其反. 这里总结VSCode的一些配置,方便自己查询,也方便网友. 1.编辑器配置 为特定类型文件指定缩进大小.缩进类型(空格 ...
- tornado源码分析-多进程
1.源码文件 process.py 2.fork子进程 def fork_processes(num_processes, max_restarts=100): ... def start_child ...