学Android--运用SQLite和ListView完成电话簿

对SQLite和ListView的单独介绍在其他两篇博客中,欢迎移步:
学Android—SQLite
学Android—ListView

首先展示结果:
效果图
为了方便,只做了一个界面,因为首先想到的是完成功能,后续会对界面进行完善。
代码已上传到github,第一次做这些东西,还有很多需要修改的地方,请多指教~
https://github.com/jiangxingling/TelephoneBook

数据库部分实现

1、实现SQLiteOpenHelper类

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

/**
 * extends SQLiteOpenHelper,override onCreate() and onUpgrade() method
 */
public class DBHelper extends SQLiteOpenHelper{

    public DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    /**
     * create table here,an item includes name and phonenumber
     * @param db
     */
    @Override
    public void onCreate(SQLiteDatabase db) {
        String create_table = "create table if not exists person"
                             +"(name text primary key,"
                             +"phoneNumber text not null)";
        db.execSQL(create_table);
        Log.d("DBHelper","23 onCreate create_table");
    }

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

    }
}

2、在MainActivity.java中完成数据库的创建
createDatabase();

    /**
     * create a database named "people"
     */
    private void createDatabase() {
        DBHelper dbHelper = new DBHelper(mContext,"people.db",null, 1);
        db = dbHelper.getWritableDatabase();
        Log.d("MainActivity","createDatabase() -- createDatabase succeed!");
    }

3、为ListView读取数据,查询数据库中的所有数据并存放到一个HashSet中

    /**
     * do query in database and put the values in a HashSet--person_set
     */
    private void queryData() {
        person_set = new HashSet<>();
        SQLiteDatabase db = openOrCreateDatabase("people.db",MODE_PRIVATE,null);
        Cursor cursor = db.rawQuery("select * from person",null);
        if(cursor != null){
            while(cursor.moveToNext()){
                String name = cursor.getString(cursor.getColumnIndex("name"));
                String phone_number = cursor.getString(cursor.getColumnIndex("phoneNumber"));
                Log.d("MainActivity","queryData() -- name = "+ name+", phone_number= " + phone_number);
                person_set.add(new Person(name,phone_number));
            }
        }
    }

4、创建Person类,因为HashSet中存放的是Person对象,一个Person对象包括name和phonenumber两种属性

import android.util.Log;

/**
 * person should have a name and a phone number
 */
public class Person {
    private String name;
    private String phoneNumber;

    public Person(String name, String phoneNumber) {
        this.phoneNumber = phoneNumber;
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPhoneNumber() {
        return phoneNumber;
    }

    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }
}

ListView部分实现

1、取出从数据库中读出的数据
getData()

    private List<Map<String, Object>> getData(){
        if(person_set != null) {
            for(Person p:person_set){
                Map<String,Object> map = new HashMap<>();
                map.put("name",p.getName());
                map.put("phone",p.getPhoneNumber());
                Log.d("MainActivity","getData() -- name = " + p.getName()+", phone = "+p.getPhoneNumber());
                datalist.add(map);
            }
//            Iterator<Person> it = person_set.iterator();
//            while (it.hasNext()) {
//                Map<String, Object> map = new HashMap<>();
//                Person p = it.next();
//                map.put("name", p.getName());
//                map.put("phone", p.getPhoneNumber());
//                Log.d("MainActivity", "getData() name = " + p.getName() + ", phone = " + p.getPhoneNumber());
//                datalist.add(map);
//            }
        }
        return datalist;
    }

2、添加ListView到界面中
initListView()

    private void initListView(){
        contacts = (ListView) findViewById(R.id.contacts);
        datalist = new ArrayList<>();
        list_adapter = new SimpleAdapter(mContext, getData(), R.layout.items,new String[]{"name", "phone"}, new int[]{R.id.name, R.id.phone});
        contacts.setAdapter(list_adapter);
    }

添加数据及ListView刷新

设置EditText及添加数据的Button,为Button设置响应事件,点击时将数据添加到数据库并刷新ListView的数据显示

    private void initView() {
        addName = (EditText) findViewById(R.id.add_name);
        addPhone = (EditText) findViewById(R.id.add_phone);
        add = (Button) findViewById(R.id.add);

        add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String add_name = addName.getText().toString();
                String add_phone = addPhone.getText().toString();
                if(!add_name.isEmpty() && !add_phone.isEmpty()) {
                    ContentValues values = new ContentValues();
                    values.put("name", add_name);
                    values.put("phoneNumber", add_phone);
                    db.insert("person", null, values);
                    values.clear();
                    Toast.makeText(mContext, "Add Succeed!", Toast.LENGTH_SHORT).show();
                    addName.setText("");
                    addPhone.setText("");
                    queryData();
                    initListView();
                }else {
                    Toast.makeText(mContext, "Name or Phone Number can not null", Toast.LENGTH_SHORT).show();
                }
            }
        });
        initListView();
    }

以上,一个最最最简单的电话本就这样完成了,不过从严格意义上来说,这还不是一个真正的电话本,因为对号码的格式没有要求,同时也不支持删除功能,除此之外还有很多功能没有实现,不过对SQLite最基本的操作和ListView的应用要求还是达到了,后续再进行改进吧!
查看源码请到github网站:
https://github.com/jiangxingling/TelephoneBook

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值