学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
- 学Android--运用SQLite和ListView完成电话簿
- 列表和字典嵌套完成电话簿(增删改查)
- Android SQLite的运用
- Android----基础----第三天----SQLite和ListView
- 【Android核心基础03】 - SQLite和ListView
- android sqlite和listview 使用小例子
- Android基础知识:单元测试、SQLite数据库和ListView
- Android ListView 详细运用
- 学Android---SQLite
- 数据存储运用ListView和SQLite数据库综合案例——商品展示
- Android listView显示SQlite
- android里面sqlite简单运用
- SQLite和listview
- 学Android---ListView
- Android问题:listview和sqlite分页加载相关资源
- Android开发案例:SQLite数据库和ListView列表结合
- Android:SQLite数据绑定ListView
- 菜鸟学android---ListView和checkBox组合常见问题
- require总结
- Linux 2.6 Completely Fair Scheduler 内幕
- C++学习日记
- 电商商品规格选择逻辑
- OJ_0046
- 学Android--运用SQLite和ListView完成电话簿
- Android SnackBar使用方法
- Zipkin分布式任务追踪
- 【结论】判断一个有序序列能否通过两轮相同的交换操作得到给出的序列
- 踩坑系列-20161113-php上imap安装哪有那么麻烦(我讨厌装各种插件!!)
- 如何阅读Java源码 阅读java的真实体会
- poj2840 Big Clock
- Java 实现二分查找\折半查找
- 【问题收录】Eclipse the import java.awt cannot be resolve 问题解决