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 ...
随机推荐
- SharePoint自动化部署,利用PowerShell 导出/导入AD中的用户
这几个月一直在帮客户改需求,部署.我已经心力憔悴,经过一段时间的摸索,我对用PowerShell实现自动化部署也有了一些心得,比如说利用PowerShell导出导入AD中的User.在基于ShareP ...
- 移动硬盘做pe启动盘
- IAR for stm8 memory窗口的功能
进入debug模式后点击菜单view-Memory 可以在线查看,RAM,FLASH,OPTION等
- MySQL复制表结构、表数据
1.复制表结构及数据到新表 CREATE TABLE 新表SELECT * FROM 旧表 这种方法会将oldtable中所有的内容都拷贝过来,当然我们可以用delete from newtable; ...
- nmap 端口扫描工具
nmap工具介绍 一.简介 nmap :也就是Network Mapper,最早是Linux下的网络扫描和嗅探工具包. nmap是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端.确定哪些服务 ...
- supervisor 安装脚本
mkdir /data/tools && cd /data/tools wget --no-check-certificate https://bootstrap.pypa.io/ez ...
- 2.3 Apache Axis2 快速学习手册之 ADB 构建Web Service
使用ADB生成服务(根据ADB 命令将wsdl 文件还原成Java代码) 要使用Axis2数据绑定框架(ADB)生成和部署服务,请执行以下步骤. 通过在Axis2_HOME / samples / q ...
- socket.io笔记三之子命名空间的socket连接
当客户端发送admin命名空间下的连接,如果主连接也监听了connetion事件,主连接的connection事件会先触发执行,然后紧接着触发执行admin命名空间下的connection事件.如果客 ...
- django rest_framework入门三-Requests和Responses
这一节,我们介绍rest_framework的Requests和Responses对象,来替代django.http的HttpRequest和HttpResponse对象 1.Requests和Res ...
- LearnOpenGL 你好,三角形[转]--附源码
原地址:你好,三角形 你好,三角形 原文 Hello Triangle 作者 JoeyDeVries 翻译 Django 校对 Geequlim 译注 在学习此节之前,建议将这三个单词先记下来: 顶点 ...