课程名称
基于Android平台移动互联网开发
实验日期
2016年5月6日
实验项目名称
SQLite数据库操作
实验地点
S30010
实验类型
□验证型 √设计型 □综合型
学 时
一、实验目的及要求(本实验所涉及并要求掌握的知识点)
设计一个个人通讯录,掌握Android平台下的数据库开发,该个人通讯录主要包括联系人列表和联系人详细信息等界面。程序主界面是通讯录的目录显示手机上联系人的名称。点击联系人的姓名可以显示联系人的详细信息。单击图标按钮可以添加联系人和删除联系人。
二、实验环境(本实验所使用的硬件设备和相关软件)
(1)PC机
(2)操作系统:Windows XP
(3)软件: Eclipse, JDK1.6,Android SDK,ADT
三、实验内容及步骤
(1) 确定数据库的数据结构。
(2) 新建工程,修改布局文件,定义字符串资源。
(3) 开发布局文件activity_main.xml用于显示联系人列表。
(4) layout目录下新建一个detail.xml,用于显示联系人详细信息。
(5) 开发数据库辅助类MyOpenHelper类
(6) DetailActivity端开发实现数据库增加、删除、修改记录等操作
(7) 新建Activity名为DetailActivity.java,实现联系人详细信息显示功能。
四、实验结果(本实验源程序清单及运行结果或实验结论、实验设计图)
代码:
MainActivity类代码:
public class MainActivity extends Activity {
private ListView lv;
private ImageButton addButton;
private ImageButton deleteButton;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv=(ListView)findViewById(R.id.listView1);
final ArrayList<HashMap<String, Object>> listItem=new ArrayList<HashMap<String,Object>>(); //定义一个动态数组
for (int i = 0; i < 3; i++) { //在数组中存放数据
HashMap<String, Object> map=new HashMap<String, Object>();
map.put("DetailName", R.id.nametext);
map.put("DetailMobile", R.id.mobiletext);
listItem.add(map);
}
SimpleAdapter simpleAdapter=new SimpleAdapter(MainActivity.this, listItem, R.layout.item,
new String[]{"DetailName","DetailMobile"} , new int[]{R.id.nametext,R.id.mobiletext});
//第一个参数:上下文,第二个参数:需要绑定的数据,第三个参数:每一行的布局,第四个参数:动态数组中的数据源,第五个参数:布局文件的id
lv.setAdapter(simpleAdapter); //为ListView绑定适配器
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {
Intent intent=new Intent();
intent.setClass(MainActivity.this, DetailActivity.class);
startActivity(intent);
finish();
}
});
addButton=(ImageButton)findViewById(R.id.addButton);
addButton.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
Intent intent2=new Intent();
intent2.setClass(MainActivity.this, DetailActivity.class);
startActivity(intent2);
finish();
}
});
}
DetailActivity类代码:
public class DetailActivity extends Activity {
private EditText namEditText;
private EditText mobilEditText;
private EditText emailEditText;
private EditText addressEditText;
private MyOpenHelper helper;
private ImageButton saveButton,backButton;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.detail);
namEditText=(EditText)findViewById(R.id.nametext);
mobilEditText=(EditText)findViewById(R.id.emailtext);
emailEditText=(EditText)findViewById(R.id.emailtext);
addressEditText=(EditText)findViewById(R.id.addresstext);
saveButton=(ImageButton)findViewById(R.id.save_imagebtn);
saveButton.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
helper=new MyOpenHelper(DetailActivity.this, "contacts.db",null, 1);
SQLiteDatabase db = helper.getReadableDatabase(); //获得可读的数据库
ContentValues values = new ContentValues();
String name2=namEditText.getText().toString();
String mobile2=mobilEditText.getText().toString();
String email2=emailEditText.getText().toString();
String address2=addressEditText.getText().toString();
// 开始填数据
if (name2.equals("")||mobile2.equals("")||email2.equals("")||address2.equals("") ){
Toast.makeText(DetailActivity.this, "请输入联系人信息",Toast.LENGTH_LONG).show();}
else {
Cursor cursor=db.rawQuery("select * from contacts where name=? ",new String[]{name2});
//rawQuery方法的第一个参数为select语句;第二个参数为select语句中占位符参数的值
//Log.i("test","111");
if (cursor.getCount()<=0) { //如果获得的查询记录小于0
values.put("name",namEditText.getText().toString()); //向表格中插入数据
values.put("mobile",mobilEditText.getText().toString());
values.put("email", emailEditText.getText().toString());
values.put("address",addressEditText.getText().toString());
db.insert("contacts", null, values);
values.clear();
Toast.makeText(DetailActivity.this, "保存成功",Toast.LENGTH_LONG).show();
}else { //如果获得的查询记录大于0,数据库中已存在该用户名
Toast.makeText(DetailActivity.this, "已存在该联系人",Toast.LENGTH_LONG).show();}
}
}
});
backButton=(ImageButton)findViewById(R.id.goback_imagebtn);
backButton.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
Intent intent=new Intent();
intent.setClass(DetailActivity.this, MainActivity.class);
startActivity(intent);
finish();
}
});
}
}
MyOpenHelper类代码:
public class MyOpenHelper extends SQLiteOpenHelper {
public static final String CREATE_CONTACTS="create table contacts(id integer primary key autoincrement,name,mobile,email,address)";
private Context myContext;
public MyOpenHelper(Context context, String name, CursorFactory factory,int version) {
super(context, name, factory, version); //调用父类构造器
myContext=context;
}
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_CONTACTS);
Toast.makeText(myContext, "数据库创建成功", Toast.LENGTH_LONG).show();
}
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
}
运行结果:(截图)
联系人列表:
当没有输入任何联系人信息,点击保存时: 输入详细联系人信息,点击保存时
当输入姓名有重复值时:
五、实验总结(对本实验结果进行分析,实验心得体会及改进意见)
这次实验是对数据库进行增、删、查、改的操作,基础是先建立一个表,在虚拟机中建立一个数据结构。在实验中对联系人表的结构不是很清晰,导致使用cursor对象和SQLiteDataBase的rawQuery ()方法查询表中联系人姓名时出错,显示“表中没有姓名列”。再次检查MyOpenHelper类,并修改相应sql语句。最终实现保存按钮功能。在MainActivity布局中使用ListView和Adapter,实现点击ListView中的一行跳转到联系人详细信息页面。但是不知道怎样把数据库中写入的信息显示出来。
实验评语
实验成绩
指导教师签名: 年 月 日
转载于:https://www.cnblogs.com/family6/p/5477317.html
相关资源:c#Windows窗体应用程序设计