Android基礎與應用 資料儲存與訪問
一、實驗目的
1. 掌握SharedPreferences的使用方法;
2. 掌握各種檔案儲存的區別與適用情況;
3. 瞭解SQLite資料庫的特點和體系結構;
4. 掌握SQLite資料庫的建立和操作方法;
5. 理解ContentProvider的用途和原理;
6. 掌握ContentProvider的建立與使用方法。
二、實驗過程
1、簡單儲存
使用SharedPreferences方式在程式關閉時儲存使用者在圖1.1的介面上輸入的資料,並在程式重新啟動時自動恢復這些資料。
在onStart()函式中呼叫loadSharePreferences()函式,讀取儲存的資訊,在onStop()函式中呼叫saveSharePreferences()函式,在關閉時儲存介面上的資訊。
程式碼如下:
public static final String PREFERENCE_NAME = "SaveSetting";
public static int MODE = Context.MODE_WORLD_READABLE+Context.MODE_WORLD_WRITEABLE;
@Override
protected void onStart() {
super.onStart();
loadSharePreferences();
}
private void loadSharePreferences() {
SharedPreferences share = getSharedPreferences(PREFERENCE_NAME, MODE);
String name = share.getString("name", "趙明");
. . . . . .
e1.setText(name);
. . . . . .
}
@Override
protected void onStop() {
super.onStop();
saveSharePreferences();
}
private void saveSharePreferences() {
SharedPreferences share = getSharedPreferences(PREFERENCE_NAME, MODE);
SharedPreferences.Editor editor = share.edit();
editor.putString("name", e1.getText().toString());
. . . . . . .
editor.commit();
}
效果如圖4.1所示
圖4.1 簡單儲存
2、建立儲存設定介面
為圖1.2的“設定”選單項新增一個“儲存設定”子選單項
在res->menu佈局檔案下建立子選單,效果如圖4.2所示。
圖 4.2 設定子選單
建立新的Blank Activity,Activity Name和Layout Name修改為有實際含義的名稱,其中“資料庫儲存”是預設選擇項。
Activity Name:SaveActivity Layout Name:activity_save
如圖4.3所示:
圖4.3 儲存設定介面
當點選圖4.2的“儲存設定”子選單項時,則啟動圖4.3的儲存設定介面。
程式碼如下:
int SUB1;
if(id==R.id.item2){
Intent intent = new Intent(MainActivity.this,SaveActivity.class);startActivityForResult(intent,SUB1);
}
當點選圖4.3的“確定”按鈕則採用選擇的儲存方式儲存資料,同時返回到圖1.1的介面。
程式碼如下:
Button choose = (Button) findViewById(R.id.button1);
choose.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(radio0.isChecked()) Saveway = "sql";
else if(radio1.isChecked()) Saveway = "inside";
else if(radio2.isChecked()) Saveway = "outside";
Uri data = Uri.parse(Saveway);
Intent result = new Intent(null,data);
setResult(RESULT_OK,result);
finish();
}
});
}
3、檔案儲存
當在圖4.2的儲存設定介面選擇“內部儲存”時,點選圖1.1介面上的“新增”按鈕則將介面上輸入的資料以檔案形式儲存在內部儲存器上。
當在圖4.2的儲存設定介面選擇“外部儲存”時,點選圖1.1介面上的“新增”按鈕則將介面上輸入的資料以檔案形式儲存在外部儲存器上。
4、資料庫儲存
當在圖4.2的儲存設定介面選擇“資料庫儲存”時,將圖1.1和圖2.2的介面上的相關資料儲存在SQLite資料庫中。
(1) 在MainActivity中的onActivityResult()函式中獲取從SaveActivity中獲取的代表儲存方式的變數Saveway:
if(requestCode==SUB1){
if(resultCode==Activity.RESULT_OK){
Saveway = data.getData().toString();
}
}
(2)在新增按鈕的點選事件上選擇儲存方式,其中StudentsqlSave(),
inSideSave(),outSideSave()分別為資料庫儲存,內部儲存,外部儲存的函式。
程式碼如下:
if(Saveway.equals("sql")){
dbadapter.open();
StudentsqlSave();
}
else if(Saveway.equals("inside")){
inSideSave();
}
else if(Saveway.equals("outside")){
outSideSave();//需要註冊
}else{
Toast.makeText(getApplicationContext(),"未設定儲存方式", Toast.LENGTH_LONG).show();
}
效果如圖4.4、4.5、4.6所示:
圖4.4 資料庫儲存 圖4.5 內部儲存 圖4.6 外部儲存
4.1 建立資料庫
建立SQLite資料庫,資料庫名稱自定義,並建立基本資訊表(BaseInfo)和專業資訊表(MajorInfo)在完成建立資料庫的工作後,程式設計實現基本的資料庫操作功能,包括資料的新增、刪除、更新和查詢。
(1)新建People類
(2)通過程式碼建庫,在DBAdapter類中封裝資料庫的建立、開啟和關閉等操作。
4.2 基本資訊表的操作
(1)新增按鈕
在圖1.1的介面上新增“刪除”按鈕
點選“新增”按鈕,則把相關資料加入基本資訊表中,新增成功應當給出相應提示資訊,新增不成功要給出不成功原因的提示資訊。新增資料的同時要呼叫實驗三中的服務計算BMI指數。
1.在儲存時為People的體質項獲取服務中計算BMI的函式:
p.health =myservice.gettizhi(Double.valueOf(e3.getText().toString()),Double.valueOf(e2.getText().toString()));;
2.在開啟基本資訊表的快捷選單檢視按鈕的點選事件中增加:
data.putString("name",p.toString());
3.在子Activity中接受該資訊:
String msg = intent.getStringExtra("name");
點選“刪除”按鈕,則把基本資訊表中全部資料刪除,刪除操作前要給出相應提示資訊,確定是否刪除。
程式碼如下:
delete.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
new AlertDialog.Builder(MainActivity.this)
.setMessage("是否確定刪除?")
.setPositiveButton("確定",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dbadapter.deleteALLDataStudent();
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
}).show();
}
效果如圖4.7所示:
圖4.7 刪除提示
(2)新增快捷選單項
在圖1.4已有的快捷選單基礎上為圖4.3介面上的ListView控制元件對應的快捷選單新增“修改”和“刪除”兩個選單項。
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
menu.add(0, CONTEXT_MENU_1, 0, "檢視");
menu.add(0, CONTEXT_MENU_2, 1, "修改");
menu.add(0, CONTEXT_MENU_3, 2, "刪除");
}
效果如圖4.8所示:
圖4.8 快捷選單
點選“檢視”選單項則會啟動圖3.2的資訊顯示介面,此時該介面上應該顯示出所選擇檢視項的所有欄位資訊。
點選“修改”選單項則會根據介面上中輸入的內容修改所選擇項的相關資料庫記錄,同時更新下面的ListView控制元件列表,修改成功,則要給出相應提示,如果修改不成功,也要給出不成功原因的提示資訊。
程式碼如下:
if(item.getItemId()==CONTEXT_MENU_2){
People people = new People();
people.name = e1.getText().toString();
people.height = . . . . . .
. . . . . . .. . . . . .. . . .. . . .. . . .. . . . .. . .
long id = am.position;
long count = dbadapter.updataOneDataStudent(id, people);
if (count == -1 ){
Toast.makeText(getApplicationContext(), "修改失敗", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(getApplicationContext(), "修改成功", Toast.LENGTH_LONG).show();
}
list1.set(am.position, e1.getText().toString());
adapter.notifyDataSetChanged();
}
效果如圖4.9所示:
圖4.9 修改
點選“刪除”選單項則會刪除所選擇項的資料庫記錄,同時更新下面的ListView控制元件列表。
程式碼如下:
if(item.getItemId()==CONTEXT_MENU_3){
dbadapter.deleteOneDataStduent(am.position);
Toast.makeText(getApplicationContext(), "刪除成功", Toast.LENGTH_LONG).show();
list1.remove(am.position);
adapter.notifyDataSetChanged();
}
效果如圖4.10所示:
圖4.10 刪除
4.3 專業資訊表的操作
當點選 “專業設定”選單項時,則會啟動專業設定介面,此時專業設定介面上應當將專業資訊表中的所有專業列出來。
點選“新增”按鈕則把EditText控制元件中輸入的專業名稱加入專業資訊表,同時更新下面的ListView控制元件列表,如果EditText控制元件為空,則要給出相應提示。
b1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(equals(e1.getText().toString())==false){
People people = new People();
people.major = e1.getText().toString();
dbadapter.insertMajor(people);
list1.add(e1.getText().toString());
adapter.notifyDataSetChanged();
}
else{
Toast.makeText(getApplicationContext(),"輸入為空", Toast.LENGTH_LONG).show();
}
}
});
長按專業設定介面上的ListView控制元件將啟動對應的快捷選單。
點選“修改”選單項則會根據EditText控制元件中輸入的內容修改所選擇項的相關資料庫記錄,同時更新下面的ListView控制元件列表,如果EditText控制元件為空,則要給出相應提示。
在onContextItemSelected()加入如下程式碼:
case CONTEXT_MENU_01:
if(e1.getText().toString()!=null){
People people = new People();
people.major = e1.getText().toString();
dbadapter.updataOneDataMajor(a.position, people);
list1.set(a.position, e1.getText().toString());
adapter.notifyDataSetChanged();
}else
{
Toast.makeText(getApplicationContext(),"無替換內容", Toast.LENGTH_LONG).show();
}
點選“刪除”選單項則刪除所選擇項的資料庫記錄,同時更新下面的ListView控制元件列表。
case CONTEXT_MENU_02:
dbadapter.deleteOneDataMajor(a.position);
list1.remove(a.position);
adapter.notifyDataSetChanged();
break;
效果如圖4.11、4.12、4.13所示:
圖4.11 新增 圖4.12 刪除 圖4.13 修改
5、資料共享
在主介面上新增一個“通訊錄”選項選單。點選“通訊錄”選單項則利用ContentProvider元件獲取Android系統內建通訊錄裡的一條聯絡人資訊,將該條記錄的聯絡人姓名的姓名輸入框,然後將該聯絡人新增到基本資訊表中,同時更新介面上的ListView控制元件列表。
(1)在res->meun中新建一個名為通訊錄的選項選單。
(2)在模擬器的通訊錄中新建一個聯絡人。
(3)在onOptionsItemSelected()中為選項選單新增事件,獲取新建聯絡人的姓名。
程式碼如下:
if(id==R.id.contentprovider){//通訊錄
String result1 = null ;
ContentResolver cr = getContentResolver();
Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
if(cursor.moveToFirst())
{
result1 = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
} else{
result1 ="沒有聯絡人";
}
e1.setText(result1);
StudentsqlSave();
list1.add(e1.getText().toString());
adapter1.notifyDataSetChanged();
}
相關文章
- android SAF儲存訪問框架Android框架
- Spring Boot 揭祕與實戰(二) 資料儲存篇 – 資料訪問與多資料來源配置Spring Boot
- 資料密集型應用儲存與檢索設計
- MySQL與PHP的基礎與應用專題之資料查詢SRBFMySqlPHP
- python基礎語法 - 資料儲存模型Python模型
- SQL Server 資料訪問策略:儲存過程QCSQLServer儲存過程
- HarmonyOS:儲存你的應用資料
- 【資料結構】哈夫曼樹的建立與基礎應用資料結構
- Android(Q)10 上的分割槽外部儲存訪問Android
- 【0基礎學爬蟲】爬蟲基礎之資料儲存爬蟲
- 33.Android資料儲存Android
- 重新學習Mysql資料庫3:Mysql儲存引擎與資料儲存原理MySql資料庫儲存引擎
- 分散式文件儲存資料庫之MongoDB訪問控制分散式資料庫MongoDB
- Android中的資料儲存之檔案儲存Android
- Python中高階資料儲存及應用Python
- Android 儲存優化 —— MMKV 整合與原理Android優化
- 《資料資產管理核心技術與應用》讀書筆記-第二章:後設資料的採集與儲存筆記
- 雲端計算導論 # 3 雲端儲存技術:概念、結構模型、關鍵技術、分散式資料儲存、常見儲存結構、應用與問題模型分散式
- Pandas庫基礎分析——資料生成和訪問
- ABP框架之——資料訪問基礎架構框架架構
- 用SharedPreference儲存資料
- 分享跨域訪問的解決方案與基礎分析跨域
- HTML5離線應用與客戶端儲存HTML客戶端
- 談一談資料儲存與物聯網
- Android的3種資料儲存技術(一)File儲存Android
- 資料庫應有與之匹配的基礎環境資料庫
- ABP 資料訪問 - IRepository 倉儲
- Xamarin SQLite教程資料庫訪問與生成SQLite資料庫
- 詳解Android資料儲存技術Android
- 37.Android資料儲存再整理Android
- Android中的資料儲存之SharedPreferencesAndroid
- ABP框架之——資料訪問基礎架構(下)框架架構
- Android Activity 重建之狀態儲存與恢復Android
- spark學習筆記--資料讀取與儲存Spark筆記
- Spark(16) -- 資料讀取與儲存的主要方式Spark
- SQL Server資料儲存與NTFS簇的大小PXSQLServer
- RocketMQ(十):資料儲存模型設計與實現MQ模型
- 分散式文件儲存資料庫之MongoDB基礎入門分散式資料庫MongoDB