转载请附上本文链接并标明作者。
这几天做了一个通讯录APP,主要难点是自己在SQlite建表而不是读取手机联系人的信息以及对SearchView的应用,另外还添加了生日提醒功能,由于时间关系并没有太多注释,可读性一般,也相对粗糙。建议在了解SQliteOpenHelper,Cursor,SimpleCursorAdapter,ListView和adapter等知识之后阅读,会容易理解。适合练手,有什么问题请留言指正,欢迎大牛指点。
(SDK:4.3,开发工具:AS1.5)
1.建立一个ContactDBhelper继承自SQliteOpenHelper类
public class ContactDBHelper extends SQLiteOpenHelper {
private static final String DB_NAME = "CONTACT_DB";
private static final String TBL_NAME = "CONTACT_TBL";
//"_id"很重要,最好加上.name存放姓名,number存放电话,千万别和我一样存int型!还有month和day分别对应月和日,用data型,这里用int型是巨大失误导致后面判断日期是十分麻烦.
private static final String CREAT_TBL ="create table CONTACT_TBL(_id INTEGER PRIMARY KEY AUTOINCREMENT,name string(20),number int,month int,day int)";
private static SQLiteDatabase db;
public static final int VERSION = 1;
public ContactDBHelper(Context context) {
super(context,DB_NAME, null,VERSION);
}
public void onCreate(SQLiteDatabase db){
this.db = db;
db.execSQL(CREAT_TBL);
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
}
public void close(){
if(db != null){
db.close();
}
}
}
2.点击添加进入addActivity来添加用户,主要用到了ContentValues.put方法。
public class addActivity extends ActionBarActivity {
private EditText iname;
private EditText inumber;
private EditText imonth;
private EditText iday;
private Button ensure,cancel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.add);
iname = (EditText)findViewById(R.id.input_name);
inumber = (EditText)findViewById(R.id.input_number);
imonth = (EditText)findViewById(R.id.input_month);
iday = (EditText)findViewById(R.id.input_day);
ensure =(Button)findViewById(R.id.action_ensure);
cancel = (Button)findViewById(R.id.action_cancel);
ensure.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ContactDBHelper contactDBHelper = new ContactDBHelper(getBaseContext());
SQLiteDatabase db = contactDBHelper.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put("name", iname.getText().toString());
cv.put("number", Integer.parseInt(inumber.getText().toString()));
cv.put("month", Integer.parseInt(imonth.getText().toString()));
cv.put("day", Integer.parseInt(iday.getText().toString()));
db.insert("CONTACT_TBL",null,cv);
addActivity.this.finish();
}
});
cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
addActivity.this.finish();
}
});
}
}
3.点击ListView上的用户名跳转到ModifyActivity,详情页的概念。点击修改可以修改联系人信息,并单击完成保存,原理是用update更新表。
public class ModifyActivity extends ActionBarActivity {
private EditText rname;
private EditText rnumber;
private EditText rmonth;
private EditText rday;
private Button change,stop;
private ImageButton phone,msg;
private int position;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_modify);
rname = (EditText)findViewById(R.id.read_name);
rnumber = (EditText)findViewById(R.id.read_number);
rmonth = (EditText)findViewById(R.id.read_month);
rday = (EditText)findViewById(R.id.read_day);
change =(Button)findViewById(R.id.action_change);
stop = (Button)findViewById(R.id.action_stop);
phone = (ImageButton)findViewById(R.id.phone);
msg = (ImageButton)findViewById(R.id.msg);
Bundle bundle = this.getIntent().getExtras();
position = bundle.getInt("position");
ContactDBHelper contactDBHelper = new ContactDBHelper(getBaseContext());
SQLiteDatabase dbr = contactDBHelper.getReadableDatabase();
Cursor cursor= dbr.query("CONTACT_TBL", null, null, null, null, null, null);
cursor.moveToPosition(position);
rname.setText(cursor.getString(cursor.getColumnIndex("name")));
rnumber.setText(cursor.getString(cursor.getColumnIndex("number")));
rmonth.setText(cursor