南昌航空大学实验报告
二0一4 年11 月14 日
课程名称:Android 实验名称:Android数据存储和数据访问
班级:姓名:同组人:
指导教师评定:签名:
一:实验目的
掌握SharedPreferences的使用方法;
掌握各种文件存储的区别与适用情况;
了解SQLite数据库的特点和体系结构;
掌握SQLite数据库的建立和操作方法;
理解ContentProvider的用途和原理;
掌握ContentProvider的创建与使用方法
二:实验工具
Eclipse(MyEclipse)+ ADT + Android2.2 SDK;
三:实验题目
1.应用程序一般允许用户自己定义配置信息,如界面背景颜色、字体大小和字体颜色等,尝试使用SharedPreferences保存用户的自定义配置信息,并在程序启动时自动加载这些自定义的配置信息。
2.尝试把第1题的用户自己定义配置信息,以INI文件的形式保存在内部存储器上。
3.使用代码建库的方式,创建名为test.db的数据库,并建立staff数据表,表内的属性值如下表所示:
属性数据类型说明
_id integer 主键
name text 姓名
sex text 性别
department text 所在部门
salary float 工资实验目的
掌握SharedPreferences的使用方法;
掌握各种文件存储的区别与适用情况;
了解SQLite数据库的特点和体系结构;
掌握SQLite数据库的建立和操作方法;
理解ContentProvider的用途和原理;
掌握ContentProvider的创建与使用方法
实验工具
Eclipse(MyEclipse)+ ADT
+ Android2.2 SDK;
实验题目
1.应用程序一般允许用户自己定义配置信息,如界面背景颜色、字体大小和字体颜色等,尝试使用SharedPreferences保存用户的自定义配置信息,并在程序启动时自动加载这些自定义的配置信息。
2.尝试把第1题的用户自己定义配置信息,以INI文件的形式保存在内部存储器上。
3.使用代码建库的方式,创建名为test.db的数据库,并建立staff 数据表,表内的属性值如下表所示:数据类型说明
_id integer 主键
name text 姓名
sex text 性别
department text 所在部门
salary float 工资
4.建立一个
ContentProvider,用来共享第3
题所建立的数据库;
4.建立一个ContentProvider,用来共享第3题所建立的数据库;
四:实验代码
InternalFileDemo
public class InternalFileDemo extends Activity {
private final String FILE_NAME = "fileDemo.txt";
private TextView labelView;
private TextView displayView;
private CheckBox appendBox ;
private EditText entryText;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(https://www.wendangku.net/doc/9514341866.html,yout.main);
labelView = (TextView)findViewById(https://www.wendangku.net/doc/9514341866.html,bel);
displayView = (TextView)findViewById(R.id.display);
appendBox = (CheckBox)findViewById(R.id.append);
entryText = (EditText)findViewById(R.id.entry);
Button writeButton = (Button)findViewById(R.id.write);
Button readButton = (Button)findViewById(R.id.read);
writeButton.setOnClickListener(writeButtonListener);
readButton.setOnClickListener(readButtonListener);
entryText.selectAll();
entryText.findFocus();
}
OnClickListener writeButtonListener = new OnClickListener() {
@Override
public void onClick(View v) {
FileOutputStream fos = null;
try {
if (appendBox.isChecked()){
fos = openFileOutput(FILE_NAME,Context.MODE_APPEND);
}
else {
fos =
openFileOutput(FILE_NAME,Context.MODE_PRIVATE);
}
String text = entryText.getText().toString();
fos.write(text.getBytes());
labelView.setText("文件写入成功,写入长度:"+text.length());
entryText.setText("");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
finally{
if (fos != null){
try {
fos.flush();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
};
OnClickListener readButtonListener = new OnClickListener() { @Override
public void onClick(View v) {
displayView.setText("");
FileInputStream fis = null;
try {
fis = openFileInput(FILE_NAME);
if (fis.available() == 0){
return;
}
byte[] readBytes = new byte[fis.available()];
while(fis.read(readBytes) != -1){
}
String text = new String(readBytes);
displayView.setText(text);
labelView.setText("文件读取成功,文件长度:"+text.length());
} catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
}
};
}
SimplePreferenceDemo
public class SimplePreferenceDemo extends Activity {
private EditText nameText;
private EditText ageText;
private EditText heightText;
public static final String PREFERENCE_NAME = "SaveSetting";
public static int MODE = Context.MODE_WORLD_READABLE +
Context.MODE_WORLD_WRITEABLE;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(https://www.wendangku.net/doc/9514341866.html,yout.main);
nameText = (EditText)findViewById(https://www.wendangku.net/doc/9514341866.html,);
ageText = (EditText)findViewById(R.id.age);
heightText = (EditText)findViewById(R.id.height);
}
@Override
public void onStart(){
s uper.onStart();
l oadSharedPreferences();
}
@Override
public void onStop(){
s uper.onStop();
s aveSharedPreferences();
}
private void loadSharedPreferences(){
SharedPreferences sharedPreferences =
getSharedPreferences(PREFERENCE_NAME, MODE);
String name = sharedPreferences.getString("Name","Tom");
int age = sharedPreferences.getInt("Age", 20);
float height = sharedPreferences.getFloat("Height",1.81f);
nameText.setText(name);
ageText.setText(String.valueOf(age));
heightText.setText(String.valueOf(height));
}
private void saveSharedPreferences(){
SharedPreferences sharedPreferences =
getSharedPreferences(PREFERENCE_NAME, MODE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("Name", nameText.getText().toString());
editor.putInt("Age",
Integer.parseInt(ageText.getText().toString()));
editor.putFloat("Height",
Float.parseFloat(heightText.getText().toString()));
https://www.wendangku.net/doc/9514341866.html,mit();
}
}
SQLiteDemo
DBAdapter.java
public class DBAdapter {
private static final String DB_NAME = "people.db";
private static final String DB_TABLE = "peopleinfo";
private static final int DB_VERSION = 1;
public static final String KEY_ID = "_id";
public static final String KEY_NAME = "name";
public static final String KEY_AGE = "age";
public static final String KEY_HEIGHT = "height";
private SQLiteDatabase db;
private final Context context;
private DBOpenHelper dbOpenHelper;
public DBAdapter(Context _context) {
context = _context;
}
/** Close the database */
public void close() {
if (db != null){
db.close();
db = null;
}
}
/** Open the database */
public void open() throws SQLiteException {
dbOpenHelper = new DBOpenHelper(context, DB_NAME, null, DB_VERSION);
try {
db = dbOpenHelper.getWritableDatabase();
}
catch (SQLiteException ex) {
db = dbOpenHelper.getReadableDatabase();
}
}
public long insert(People people) {
ContentValues newValues = new ContentValues();
newValues.put(KEY_NAME, https://www.wendangku.net/doc/9514341866.html,);
newValues.put(KEY_AGE, people.Age);
newValues.put(KEY_HEIGHT, people.Height);
return db.insert(DB_TABLE, null, newValues);
}
public People[] queryAllData() {
Cursor results = db.query(DB_TABLE, new String[] { KEY_ID, KEY_NAME, KEY_AGE, KEY_HEIGHT},
null, null, null, null, null);
return ConvertToPeople(results);
}
public People[] queryOneData(long id) {
Cursor results = db.query(DB_TABLE, new String[] { KEY_ID, KEY_NAME, KEY_AGE, KEY_HEIGHT},
KEY_ID + "=" + id, null, null, null, null);
return ConvertToPeople(results);
}
private People[] ConvertToPeople(Cursor cursor){
int resultCounts = cursor.getCount();
if (resultCounts == 0 || !cursor.moveToFirst()){
return null;
}
People[] peoples = new People[resultCounts];
for (int i = 0 ; i peoples[i] = new People(); peoples[i].ID = cursor.getInt(0); peoples[i].Name = cursor.getString(cursor.getColumnIndex(KEY_NAME)); peoples[i].Age = cursor.getInt(cursor.getColumnIndex(KEY_AGE)); peoples[i].Height = cursor.getFloat(cursor.getColumnIndex(KEY_HEIGHT)); cursor.moveToNext(); } return peoples; } public long deleteAllData() { return db.delete(DB_TABLE, null, null); } public long deleteOneData(long id) { return db.delete(DB_TABLE, KEY_ID + "=" + id, null); } public long updateOneData(long id , People people){ ContentValues updateValues = new ContentValues(); updateValues.put(KEY_NAME, https://www.wendangku.net/doc/9514341866.html,); updateValues.put(KEY_AGE, people.Age); updateValues.put(KEY_HEIGHT, people.Height); return db.update(DB_TABLE, updateValues, KEY_ID + "=" + id, null); } /** 静态Helper类,用于建立、更新和打开数据库*/ private static class DBOpenHelper extends SQLiteOpenHelper { public DBOpenHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); } private static final String DB_CREATE = "create table " + DB_TABLE+ " ("+ KEY_ID+ " integer primary key autoincrement, " + KEY_NAME+ " text not null, "+ KEY_AGE+ " integer,"+ KEY_HEIGHT + " float);"; @Override public void onCreate(SQLiteDatabase _db) { _db.execSQL(DB_CREATE); } @Override public void onUpgrade(SQLiteDatabase _db, int_oldVersion, int _newVersion) { _db.execSQL("DROP TABLE IF EXISTS " + DB_TABLE); onCreate(_db); } } } People.java public class People { public int ID = -1; public String Name; public int Age; public float Height; @Override public String toString(){ String result = ""; result += "ID:" + this.ID + ","; result += "姓名:" + https://www.wendangku.net/doc/9514341866.html, + ","; result += "年龄:" + this.Age + ", "; result += "身高:" + this.Height + ","; return result; } } SQLiteDemo.java public class SQLiteDemo extends Activity { /** Called when the activity is first created. */ private DBAdapter dbAdepter ; private EditText nameText; private EditText ageText; private EditText heightText; private EditText idEntry; private TextView labelView; private TextView displayView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(https://www.wendangku.net/doc/9514341866.html,yout.main); nameText = (EditText)findViewById(https://www.wendangku.net/doc/9514341866.html,); ageText = (EditText)findViewById(R.id.age); heightText = (EditText)findViewById(R.id.height); idEntry = (EditText)findViewById(R.id.id_entry); labelView = (TextView)findViewById(https://www.wendangku.net/doc/9514341866.html,bel); displayView = (TextView)findViewById(R.id.display); Button addButton = (Button)findViewById(R.id.add); Button queryAllButton = (Button)findViewById(R.id.query_all); Button clearButton = (Button)findViewById(R.id.clear); Button deleteAllButton = (Button)findViewById(R.id.delete_all); Button queryButton = (Button)findViewById(R.id.query); Button deleteButton = (Button)findViewById(R.id.delete); Button updateButton = (Button)findViewById(R.id.update); addButton.setOnClickListener(addButtonListener); queryAllButton.setOnClickListener(queryAllButtonListener); clearButton.setOnClickListener(clearButtonListener); deleteAllButton.setOnClickListener(deleteAllButtonListener); queryButton.setOnClickListener(queryButtonListener); deleteButton.setOnClickListener(deleteButtonListener); updateButton.setOnClickListener(updateButtonListener); dbAdepter = new DBAdapter(this); dbAdepter.open(); } OnClickListener addButtonListener = new OnClickListener() { @Override public void onClick(View v) { People people = new People(); https://www.wendangku.net/doc/9514341866.html, = nameText.getText().toString(); people.Age = Integer.parseInt(ageText.getText().toString()); people.Height = Float.parseFloat(heightText.getText().toString()); long colunm = dbAdepter.insert(people); if (colunm == -1 ){ labelView.setText("添加过程错误!"); } else { labelView.setText("成功添加数据,ID: "+String.valueOf(colunm)); } } }; OnClickListener queryAllButtonListener = new OnClickListener() { @Override public void onClick(View v) { People[] peoples = dbAdepter.queryAllData(); if (peoples == null){ labelView.setText("数据库中没有数据"); return; } labelView.setText("数据库:"); String msg = ""; for (int i = 0 ; i msg += peoples[i].toString()+"\n"; } displayView.setText(msg); } }; OnClickListener clearButtonListener = new OnClickListener() { @Override public void onClick(View v) { displayView.setText(""); } }; OnClickListener deleteAllButtonListener = new OnClickListener() { @Override public void onClick(View v) { dbAdepter.deleteAllData(); String msg = "数据全部删除"; labelView.setText(msg); } }; OnClickListener queryButtonListener = new OnClickListener() { @Override public void onClick(View v) { int id = Integer.parseInt(idEntry.getText().toString()); People[] peoples = dbAdepter.queryOneData(id); if (peoples == null){ labelView.setText("数据库中没有ID为"+String.valueOf(id)+"的数据"); return; } labelView.setText("数据库:"); displayView.setText(peoples[0].toString()); } }; OnClickListener deleteButtonListener = new OnClickListener() { @Override public void onClick(View v) { long id = Integer.parseInt(idEntry.getText().toString()); long result = dbAdepter.deleteOneData(id); String msg = "删除ID为"+idEntry.getText().toString()+"的数据" + (result>0?"成功":"失败"); labelView.setText(msg); } }; OnClickListener updateButtonListener = new OnClickListener() { @Override public void onClick(View v) { People people = new People(); https://www.wendangku.net/doc/9514341866.html, = nameText.getText().toString(); people.Age = Integer.parseInt(ageText.getText().toString()); people.Height = Float.parseFloat(heightText.getText().toString()); long id = Integer.parseInt(idEntry.getText().toString()); long count = dbAdepter.updateOneData(id, people); if (count == -1 ){ labelView.setText("更新错误!"); } else { labelView.setText("更新成功,更新数据 "+String.valueOf(count)+"条"); } } }; }