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

来源:互联网 发布:java web不用tomcat 编辑:程序博客网 时间:2024/06/05 00:53

对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

0 0