sqlLite数据库 实现对数据的增删改查 以及用list显示出数据内容

效果图:



1 、创建class:BlackNumberDBHelper 黑名单数据库的DBHelp

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

/**
 * 
 * @author Administrator
 * 黑名单数据库的DBHelp
 */
public class BlackNumberDBHelper extends SQLiteOpenHelper{

	public BlackNumberDBHelper(Context context) {
		super(context, "blacknumber.db", null, 1);
		
	}

	//第一次创建数据库的时候执行
	@Override
	public void onCreate(SQLiteDatabase db) {
		String sql = "CREATE TABLE blacknumber (_id integer primary key autoincrement, number varchar(20))";
		db.execSQL(sql);
	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		
		
	}
	
}

2、创建class:BlackNumberDao     黑名单数据库的db操作

import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import com.iponeguardian.db.BlackNumberDBHelper;
/**
 * 
 * @author Administrator
 *	 黑名单数据库的db操作
 */
public class BlackNumberDao {
	private Context context;   //上下文
	private Cursor cursor;	   //游标
	private SQLiteDatabase db; 
	private String sql ;       //sql语句
	private BlackNumberDBHelper dbHelper;
	
	
	public BlackNumberDao(Context context) {		
		this.context = context;
		dbHelper = new BlackNumberDBHelper(context);
	}
	
	
	/**
	 * 查找全部
	 */
	
	public List<String> getAllNumbers(){
		db = dbHelper.getReadableDatabase();
		List<String> number_list = new ArrayList<String>();  //存放所有的电话号码
		if(db.isOpen()){
			sql = "SELECT * FROM  BLACKNUMBER";
			cursor = db.rawQuery(sql, null);                //得到一组游标的结果
			while(cursor.moveToNext()){						//遍历游标
				String number_all = cursor.getString(1);
				number_list.add(number_all);				
			}
			cursor.close();
			db.close();
		}
		
		return number_list;
	}
	/**
	 * 查询的方法
	 * @param number
	 * @return
	 */
	public boolean find (String number){
		boolean result = false;
		 db = dbHelper.getReadableDatabase();
		if(db.isOpen()){
			sql = "select number from blacknumber where number = ?";
			cursor = db.rawQuery(sql, new String[]{number});
			if(cursor.moveToNext()){
				result = true;
			}else{
				result = false;
			}
			cursor.close();			
			db.close();
		}
		
		return result ;
	}
	
	
	/**
	 * 添加的方法
	 */
	
	public void add (String number){
		if(find(number)){
			return;
		}
		db = dbHelper.getWritableDatabase();
		if(db.isOpen()){
			String sql = "insert into blacknumber (number) values (?)";			
			db.execSQL(sql,new Object[]{number});			
			db.close();
		}
	}
	
	/**
	 * 删除
	 */
	public void delete(String number){
		db = dbHelper.getWritableDatabase();
		if(db.isOpen()){
			sql = "DELETE FORM BLACKNUMBER WHERE NUMBER=?";
			db.execSQL(sql,new Object[]{number});			
			db.close();
		}
	}
	
	/**
	 * 修改更新lodNumber 旧的号码   newNumber新的号码
	 */
	public void update(String oldNumber, String newNumber){
		db = dbHelper.getWritableDatabase();
		if(db.isOpen()){
			sql = "update  BLACKNUMBER SET NUMBER=? WHERE NUMBER = ?";
			db.execSQL(sql,new Object[]{newNumber,oldNumber});			
			db.close();
		}
	}
} 
3、创建用于管理黑名单的布局文件activity_call_sms.xml:

<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:orientation="vertical">
    

    <LinearLayout        
        android:layout_width="match_parent"
        android:layout_height="40dip"
        android:background="@drawable/title_background"
        android:gravity="center_horizontal|center_vertical" 
        android:orientation="horizontal">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="黑名单管理"
          	android:textColor="#ff289F38" 
            android:textSize="22sp" />

        <Button
            android:id="@+id/btn_add_black_number"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20dip"
            android:background="@drawable/button_selector"
            android:text="添加"
            android:textColor="#06A3CF"
            android:textSize="20sp" />
    </LinearLayout>

    <ListView
        android:cacheColorHint="@android:color/transparent"
        android:id="@+id/listView_callsms"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="10dip"
        android:listSelector="@drawable/item_background_selector"            
        android:numColumns="3" >
    </ListView>

</LinearLayout>

3.2以及它list显示的Item()布局文件:blacknumber_item.xml,  这里我们用到的Adpter是ArrayAdapter,他的Item布局文件有且仅有一个TextView组成:

    <TextView 
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/textView_blackNumber_Item"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textColor="#E53403"
        android:textSize="18sp"
        />

4、下面进行最重要的Activity操作,新建CallSmsActivity继承Activity并实现OnClickListener     实现它未实现的方法。

package com.iponeguardian.ui;

import java.util.List;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.os.Bundle;
import android.text.InputType;
import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

import com.example.iponeguardian.R;
import com.iponeguardian.dao.BlackNumberDao;
/**
 * 通讯位置之    黑名单管理的activity
 * @author Administrator
 *
 */
public class CallSmsActivity extends Activity implements OnClickListener {

    private Button btn_add_black_number;  //添加黑名单按钮
    private ListView listView_callsms;       //显示黑名单信息
    private BlackNumberDao numberDao;      //黑名单数据库
    private List<String> numbers;         //黑名单号码的集合
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_call_sms);
        numberDao = new BlackNumberDao(this);
        
        //获得引用
        btn_add_black_number = (Button) findViewById(R.id.btn_add_black_number);
        listView_callsms = (ListView)findViewById(R.id.listView_callsms);
        
        //绑定侦听事件
        btn_add_black_number.setOnClickListener(this);    
        
        //调用数据库getAll方法得到所有的黑名单数据,并存在List集合中
        numbers = numberDao.getAllNumbers();    
        for(int i=0;i<numbers.size();i++){
            System.out.println("++++++++++++++++++++++++++++++"+numbers.get(i));
        }
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(CallSmsActivity.this, R.layout.blacknumber_item,numbers);
        //为显示黑名单的list设置Adapter
        listView_callsms.setAdapter(adapter);
        
    }
    
    
    @Override
    public void onClick(View v) {        
        //弹出对话框用来添加黑名单,传进去的上下文是CallSmsActivity.this  因为这个对话框挂载在Activity里边
        AlertDialog.Builder builder = new Builder(CallSmsActivity.this);
        builder.setTitle("添加黑名单");
        final EditText etitText = new EditText(CallSmsActivity.this);    
        //设置它的文本类型只能是数字
        etitText.setInputType(InputType.TYPE_CLASS_PHONE);
        builder.setView(etitText);
        builder.setPositiveButton("添加", new DialogInterface.OnClickListener() {
            
            @Override
            public void onClick(DialogInterface arg0, int arg1) {
                //得到输入框中输入的类容
                String number = etitText.getText().toString().trim();
                if(TextUtils.isEmpty(number)){
                    Toast.makeText(getApplicationContext(), "添加黑名单号码不能为空", 1).show();
                    return;
                }else{
                    //调用数据库添加方法
                    numberDao.add(number);
                    //通知ListView更新数据
                    
                }
            }
        });
        
        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {            
            @Override
            public void onClick(DialogInterface dialog, int which) {                
                
            }
        });
        builder.create().show();    
        
    }   
    
}

二、  长按ListView列表弹出”更新黑名单“和删除黑名单、listView时实更新


 1 长按ListView列表弹出”更新黑名单“和删除黑名单,重写onCreateContextMenu和onContextItemSelected方法

//listView设置的上下文菜单
	@Override
	public void onCreateContextMenu(ContextMenu menu, View v,
			ContextMenuInfo menuInfo) {	
		super.onCreateContextMenu(menu, v, menuInfo);
		MenuInflater inflater = getMenuInflater();       
		inflater.inflate(R.menu.content_menu, menu);   //content_menu是配置文件内容
	}

配置文件content_menu:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:id="@+id/update_number" android:title="更改黑名单"/>
	<item android:id="@+id/delete_number" android:title="删除黑名单"/>
</menu>
//菜单的点击事件,通过item参数得到当前点击的menu信息
	@Override
	public boolean onContextItemSelected(MenuItem item) {
		AdapterContextMenuInfo info =(AdapterContextMenuInfo) item.getMenuInfo();
		int id = (int)info.id; 	 			 //当前条目的id
		String number = numbers.get(id);	 //得到list要删除的内容
		switch (item.getItemId()) {
		case R.id.update_number:  				//更新的按钮(菜单文件放在menu中的content_menu.xml)
		    updateNumner(number);	
			break;
		case R.id.delete_number: 				 //删除 的按钮			
			numberDao.delete(number); 			 //执行数据库的删除操作			
			numbers = numberDao.getAllNumbers(); //重新获取最新的黑名单
			adapter.notifyDataSetChanged();		 //通知listView更新数据
			break;
		
		}
		return super.onContextItemSelected(item);
	}

更改对话框的实现:

/**
	 * 更新黑名单的方法
	 * @param number
	 */
	private void updateNumner(final String oldNumber) {
		AlertDialog.Builder builder = new Builder(CallSmsActivity.this);
		builder.setTitle("更改黑名单号码");
		final EditText etitText = new EditText(CallSmsActivity.this);	
		//设置它的文本类型只能是数字
		etitText.setInputType(InputType.TYPE_CLASS_PHONE);
		builder.setView(etitText);
		builder.setPositiveButton("更改", new DialogInterface.OnClickListener() {
			
			@Override
			public void onClick(DialogInterface arg0, int arg1) {
				//得到输入框中输入的新号码
				String newNumber = etitText.getText().toString().trim();
				if(TextUtils.isEmpty(newNumber)){
					Toast.makeText(getApplicationContext(), "添加黑名单号码不能为空", 1).show();
					return;
				}else{
					//调用数据库更改方法
					numberDao.update(oldNumber, newNumber);
					//调用数据库getAll方法得到所有的黑名单数据,并存在List集合中
					numbers = numberDao.getAllNumbers();	
					//通知ListView更新数据,只更新发生改变的数据
					adapter.notifyDataSetChanged();					
				}
			}
		});
		
		builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {			
			@Override
			public void onClick(DialogInterface dialog, int which) {				
				
			}
		});
		builder.create().show();	
		
	}


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值