實驗8 SQLite數據庫操做java
【目的】數據庫
設計一個我的通信錄,掌握Android平臺下的數據庫開發,該我的通信錄主要包括聯繫人列表和聯繫人詳細信息等界面。數據結構
【要求】app
程序主界面是通信錄的目錄顯示手機上聯繫人的名稱。長按聯繫人的姓名能夠顯示聯繫人的詳細信息。添加和刪除按鈕能夠添加聯繫人和刪除聯繫人。ide
【實驗環境】佈局
1)PC機post
2)操做系統:Windows XP學習
3)軟件: Eclipse, JDK1.6,Android SDK,ADTui
【實驗內容及步驟】this
1)肯定數據庫的數據結構
2) 在res/drawable-mdpi目錄下拷入程序要用的圖標
3)定義字符串資源string.xml
4)開發佈局文件activity_main.xml用於顯示聯繫人列表
5)layout目錄下新建一個detail.xml,用於顯示聯繫人詳細信息
6)開發數據庫輔助類MyOpenHelper類,新建一個MyOpenHelper.java
7)接下來便進入MainActivity端的開發,實現數據庫增長、刪除、修改記錄等操做
8)新建一個Activity名字叫DetailActivity.java,實現聯繫人詳細信息顯示功能
string.xml代碼:
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">contact</string> <string name="action_settings">Settings</string> <string name="hello_world">Hello world!</string> <string name="Name">姓名:</string> <string name="phone">固定電話:</string> <string name="mobile">移動電話:</string> <string name="email">電子郵件:</string> <string name="post">郵政編碼:</string> <string name="addr">通訊地址:</string> <string name="comp">公司名稱:</string> <string name="add">添加</string> <string name="modify">修改</string> <string name="delete">刪除</string> <string name="save">保存</string> <string name="message">確認刪除此聯繫人嗎?</string> <string name="ok">肯定</string> <string name="cancel">取消</string> <string name="title">聯繫人列表</string> </resources>
MainActivity.java部分代碼:
public class MainActivity extends Activity { private DBOpenHelper dbOpenHelper; private ContantsAdapter contantsAdapter; private ListView dbListView; private Cursor cursor; final int MENU_ADD = Menu.FIRST; final int MENU_CHANGE = Menu.FIRST+1; private List<String> ids; private List<String> names; private List<String> phones; AlertDialog dialog; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); dbOpenHelper = new DBOpenHelper(this); dbListView = (ListView)findViewById(R.id.db_listview); refreshDBOpenHelper(); dbListView.setOnItemClickListener(new OnItemClickListener(){ public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { Intent intent= new Intent(); intent.putExtra("cmd", 0); String contants_id = ids.get(position);//0表明查詢聯繫人,1表明添加聯繫人 intent.putExtra("id", contants_id); intent.setClass(MainActivity.this, DetailContantsActivity.class); startActivity(intent); } }); dbListView.setOnItemLongClickListener(new OnItemLongClickListener(){ public boolean onItemLongClick(AdapterView<?> arg0, View arg1, final int position, long arg3) { dialog = new AlertDialog.Builder(MainActivity.this) .setTitle("提示!!") .setMessage("肯定要刪除這條記錄?") .setPositiveButton("肯定", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { String contants_id = ids.get(position); dbOpenHelper.deleteContants(contants_id); dbOpenHelper.close(); Toast.makeText(MainActivity.this, "正在刪除數據庫,請稍後。。。", Toast.LENGTH_LONG).show(); refreshDBOpenHelper(); contantsAdapter.notifyDataSetChanged(); } }) .setNegativeButton("取消",new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { dialog.dismiss(); } }).show(); return false; } }); } @Override protected void onResume() { refreshDBOpenHelper(); contantsAdapter.notifyDataSetChanged(); super.onResume(); } public void refreshDBOpenHelper(){ cursor = dbOpenHelper.selectContants(); ids = new ArrayList<String>(); names = new ArrayList<String>(); phones = new ArrayList<String>(); int count = cursor.getCount(); if(count>0){ for(int i=0;i<count;i++){ cursor.moveToPosition(i); ids.add(cursor.getString(0)); names.add(cursor.getString(1)); phones.add(cursor.getString(2)); } }else{ Toast.makeText(this, R.string.not_dbcursor_values, Toast.LENGTH_SHORT).show(); } contantsAdapter = new ContantsAdapter(this,names,phones); dbListView.setAdapter(contantsAdapter); cursor.close(); dbOpenHelper.close(); } @Override public boolean onCreateOptionsMenu(Menu menu) { menu.add(0, MENU_ADD, 0, R.string.menu_add) .setIcon(R.drawable.add); //add - add_button menu.add(0, MENU_CHANGE, 0, R.string.menu_change) .setIcon(R.drawable.modify); //add -add_change_password return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()){ // case MENU_ADD: //press change add button Intent add_intent= new Intent(this,DetailContantsActivity.class); add_intent.putExtra("cmd", 1); startActivity(add_intent); break; case MENU_CHANGE: //press change password button Intent change_password_intent = new Intent(MainActivity.this,PasswordManage.class); startActivityForResult(change_password_intent,0); break; } return super.onOptionsItemSelected(item); } }
【實驗結果截圖】
【實驗小結】
此次實驗感受很難,由於缺了幾節課,什麼都沒學習到,可是請教了幾位同窗,勉強完成了一部分。