实验报告
课程名称 |
基于Android平台移动互联网开发 |
实验日期 |
2016年4月29日 |
||
实验项目名称 |
SQLite数据库操作 |
实验地点 |
S30010 |
||
实验类型 |
□验证型 √设计型 □综合型 |
学 时 |
2 |
||
一、实验目的及要求(本实验所涉及并要求掌握的知识点) |
|||||
1. 设计一个个人通讯录,掌握Android平台下的数据库开发,该个人通讯录主要包括联系人列表和联系人详细信息等界面。 2. 程序主界面是通讯录的目录显示手机上联系人的名称。点击联系人的姓名可以显示联系人的详细信息。在按了MEMU键之后会弹出菜单栏。单击菜单栏上的按钮可以添加联系人和删除联系人。 |
|||||
二、实验环境(本实验所使用的硬件设备和相关软件) |
|||||
(1)PC机 (2)操作系统:Windows XP (3)软件: Eclipse, JDK1.6,Android SDK,ADT |
|||||
三、实验内容及步骤 |
|||||
1.新建一个名为PersonalAddr的工程 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,实现联系人详细信息显示功能。 |
|||||
四、实验结果(本实验源程序清单及运行结果或实验结论、实验设计图) |
|||||
代码: MainActivity.java中: package com.example.personaladdr; import java.security.PublicKey; import java.util.List; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.database.Cursor; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ListView; public class MainActivity extends Activity { private MyOpenHelper db; private ListView lView; 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 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //db=new MyOpenHelper(context, name, null, 1); //db=new MyOpenHelper(this); lView=(ListView)findViewById(R.id.db_listview); lView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { // TODO Auto-generated method stub Intent intent=new Intent(); intent.putExtra("cmd", 0); //0代表查询联系人,1代表添加联系人 String contants_id=ids.get(position); intent.putExtra("id", contants_id); intent.setClass(MainActivity.this,DetailActivity.class); startActivity(intent); } }); lView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, final int position, long arg3) { // TODO Auto-generated method stub } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. return super.onCreateOptionsMenu(menu); } } MyOpenHelper.java中: package com.example.personaladdr; import android.R.integer; import android.R.string; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; public class MyOpenHelper extends SQLiteOpenHelper{ public static final String DB_NAME="personal_contacts"; public static final String TABLE_NAME="contacts"; public static final String ID="_id"; public static final String NAME="name"; public static final String PHONE="phone"; public static final String MOBILE="mobile"; public static final String EMAIL="email"; public static final String POST="post"; public static final String ADDR="addr"; public static final String COMP="comp"; public MyOpenHelper(Context context, String name, CursorFactory factory, int version) { super(context, DB_NAME, null, 1);//调用父类构造器 // TODO Auto-generated constructor stub } @Override public void onCreate(SQLiteDatabase db) {//重写onCreate方法 // TODO Auto-generated method stub db.execSQL("create table if not exists"+TABLE_NAME+"(" +ID+"integer primary key," +NAME+"varchar," +PHONE+"varchar," +MOBILE+"varchar," +EMAIL+"varchar," +POST+"varchar," +ADDR+"varchar," +COMP+"varchar)"); } @Override public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) {//重写onUpgrade方法 // TODO Auto-generated method stub db.execSQL("drop table if exists"+TABLE_NAME); onCreate(db); } public Cursor selectContants(){ SQLiteDatabase db=this.getReadableDatabase(); Cursor cursor=db.query(TABLE_NAME, null, null, null, null, null, null); return cursor; } public long insertContants(String[] strArray){ SQLiteDatabase db=this.getWritableDatabase(); ContentValues cv=new ContentValues(); cv.put(NAME, strArray[0]); cv.put(PHONE, strArray[1]); cv.put(MOBILE, strArray[2]); cv.put(EMAIL, strArray[3]); cv.put(POST, strArray[4]); cv.put(ADDR, strArray[5]); cv.put(COMP, strArray[6]); return db.insert(TABLE_NAME, null, cv); } public void deleteContants(String id){ SQLiteDatabase db=this.getWritableDatabase(); String where=ID+"=?"; String[] whereValues={id}; db.delete(TABLE_NAME, where, whereValues); } public int updateContants(String id,String[] strArray){ SQLiteDatabase db=this.getWritableDatabase(); String where=ID+"=?"; String[] whereValues={id}; ContentValues cv=new ContentValues(); cv.put(NAME, strArray[0]); cv.put(PHONE, strArray[1]); cv.put(MOBILE, strArray[2]); cv.put(EMAIL, strArray[3]); cv.put(POST, strArray[4]); cv.put(ADDR, strArray[5]); cv.put(COMP, strArray[6]); return db.update(TABLE_NAME, cv, where, whereValues); } public Cursor getContants(String id){ SQLiteDatabase db=this.getReadableDatabase(); String where=ID+"=?"; String[] whereValues={id}; Cursor cursor=db.query(TABLE_NAME, null, where, whereValues, null, null, null); return cursor; } } DetailActivity.java中: package com.example.personaladdr; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.database.Cursor; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.EditText; import android.widget.ImageButton; import android.widget.Toast; public class DetailActivity extends Activity{ Cursor cursor; MyOpenHelper db; int id=-1; int i; int [] textIds={ R.id.etName,R.id.etPhone,R.id.etMobile,R.id.etEmail,R.id.etPhone,R.id.etAddr,R.id.etComp }; EditText [] textArray; ImageButton saveButton; //0表示查看信息,1表示添加联系人,2表示修改联系人 int status=-1; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.detail); final ImageButton saveBtn=(ImageButton)findViewById(R.id.ibSave); textArray=new EditText[textIds.length]; for(int i=0;i<textIds.length;i++){ textArray[i]=(EditText)findViewById(textIds[i]); } Intent intent=getIntent(); status=intent.getExtras().getInt("cmd"); switch(status){ case 0: String contants_id=intent.getExtras().getString("id"); cursor=db.getContants(contants_id); int count=cursor.getCount(); if(count==0){ Toast.makeText(this, "对不起,没有找到指定的联系人!", Toast.LENGTH_LONG).show(); }else { cursor.moveToFirst(); textArray[0].setText(cursor.getString(1)); textArray[1].setText(cursor.getString(2)); textArray[2].setText(cursor.getString(3)); textArray[3].setText(cursor.getString(4)); textArray[4].setText(cursor.getString(5)); textArray[5].setText(cursor.getString(6)); textArray[6].setText(cursor.getString(7)); } cursor.close(); db.close(); break; case 1: for(EditText et:textArray){ et.getEditableText().clear(); } break; } saveBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub String [] strArray=new String[textArray.length]; for(int i=0;i<strArray.length;i++){ strArray[i]=textArray[i].getText().toString().trim(); } if(strArray[0].equals("")||strArray[1].equals("")){ Toast.makeText(DetailActivity.this, "对不起,您填写的姓名或电话不完整!", Toast.LENGTH_LONG).show(); }else { switch(status){ case 0: updateContact(strArray); break; case 1: insertContant(strArray); break; } } } }); } public void insertContant(String [] strArray){ long count = db.insertContants(strArray); db.close(); if(count == -1){ Toast.makeText(this, "添加联系人失败!", Toast.LENGTH_LONG).show(); } else{ Toast.makeText(this, "添加联系人成功!", Toast.LENGTH_LONG).show(); } } public void updateContact(String [] strArray){ int count = db.updateContants(id+"", strArray); //更新数据库 db.close(); if(count == 1){ Toast.makeText(this, "修改联系人成功!", Toast.LENGTH_LONG).show(); } else{ Toast.makeText(this, "修改联系人失败!", Toast.LENGTH_LONG).show(); } } } 运行结果:(截图) |
|||||
五、实验总结(对本实验结果进行分析,实验心得体会及改进意见) |
|||||
实验难度很大,本来可以运行出界面填写数据的,在对ImageButton的代码实现过程中不知道发生了什么错误,导致系统发生了崩溃。 |
|||||
实验评语 |
|
||||
实验成绩 |
|
指导教师签名: 年 月 日 |