内容发布更新时间 : 2024/11/15 15:43:57星期一 下面是文章的全部内容请认真阅读。
(3)删除记事
点击上下键,选中要删除的记事,然后点击“menu”菜单,然后点击“删除当前记事”,对选中的记事加以删除。
4.3 记事本存储实现
Android 中一共提供了5种数据存储方式,但是由于存储的这些数据都是其应用程序私有的,所以如果需要在其他应用程序中使用这些数据,就要使用Android提供的Content Providers。
Content Providers:Android提供的一个特殊的存储数据的类型,它提供了一套标准的接口来获取,操作数据。
Shared Preference:用来存储“key-value paires”格式的数据,它是一个轻量级的键值存储机制,只可以存储基本数据类型。 Files:它通过File Input Stream 和 File Output Stream对文件进行操作,但是在Android中,文件是一个应用程序私有的,一个应用程序无法读写其他应用程序的文件。 SQL ite:Android提供的一个标准的数据库,支持SQL语句。 Network:通过网络来存储和获得数据。
4.3.1 数据存储之Shared Preferences
通过getpreferences()方法来获得Preference对象,通过SharePreferences.Editor editor=uiState.edit; 取得编辑对象,然后通过editor.put……()方法添加数据,最后通过commit()方法来保存数据。
4.3.2 数据存储之Files
我们可以通过自定义的save()方法来保存数据,同时也可以通过load()方法来获取文件中的数据。 boolean save() { Properties properties = new Properties(); /* 将数据打包成Properties */ properties.put(\ try { FileOutputStream stream = this.openFileOutput(\Context.MODE_WORLD_WRITEABLE); /* 将打包好的数据写入文件中 */ properties.store(stream, \ } catch (FileNotFoundException e) { return false; } catch (IOException e) { return false;
} return true; }
/* 装载、读取数据 */ void load() { /* 构建Properties对对象 */ Properties properties = new Properties(); try { /* 开发文件 */ FileInputStream stream = this.openFileInput(\ /* 读取文件内容 */ properties.load(stream); } catch (FileNotFoundException e) { return; } catch (IOException e) { return; } /* 取得数据 */ mbMusic = Boolean.valueOf(properties.get(\}
4.3.3 数据存储之Network
通过网络来获取和保存数据资源,将数据存储到网络上的方法很多,比如将要保存的数据以文件的方式上传到服务器,发送邮件等。 下面我们看下如何实现读取网络文件 String myString = null; try { /* 定义我们要访问的地址url */ URL uri = new URL(\ /* 打开这个url连接 */ URLConnection ucon = uri.openConnection(); /* 从上面的链接中取得InputStream */ InputStream is = ucon.getInputStream(); BufferedInputStream bis = new BufferedInputStream(is); ByteArrayBuffer baf = new ByteArrayBuffer(100); int current = 0; /* 一直读到文件结束 */
while ((current = bis.read()) != -1) { baf.append((byte) current); } myString = new String(baf.toByteArray()); } catch (Exception e) { myString = e.getMessage(); } 另外由于在程序中访问了外部网络,我们需要在AndroidManifest.xml文件中给予权限,代码如下:
4.3.4 数据存储之SQLite
这个方法在数据保存中非常常用.只是它只会被一个程序读取数据,不能在不同程序间共享数据. /*创建和打开数据库*/
mSQLiteDatabase = this.openOrCreateDatabase(DATABASE_NAME, MODE_PRIVATE, null); /*创建表*/
mSQLiteDatabase.execSQL(CREATE_TABLE); /* 删除数据库 */ public void DeleteDataBase() { this.deleteDatabase(DATABASE_NAME); this.finish(); } /* 删除一个表 */ public void DeleteTable() { mSQLiteDatabase.execSQL(\ this.finish(); } /* 更新一条数据 */ public void UpData() { ContentValues cv = new ContentValues(); cv.put(TABLE_NUM, miCount); cv.put(TABLE_DATA, \修改后的数据\ /* 更新数据 */ mSQLiteDatabase.update(TABLE_NAME, cv, TABLE_NUM + \+ Integer.toString(miCount - 1), null); UpdataAdapter(); }
/* 向表中添加一条数据 */ public void AddData() { ContentValues cv = new ContentValues(); cv.put(TABLE_NUM, miCount); cv.put(TABLE_DATA, \测试数据库数据\ /* 插入数据 */ mSQLiteDatabase.insert(TABLE_NAME, null, cv); miCount++; UpdataAdapter(); } /* 从表中删除指定的一条数据 */ public void DeleteData() { /* 删除数据 */ mSQLiteDatabase.execSQL(\+ Integer.toString(miCount)); miCount--; if (miCount < 0) { miCount = 0; } UpdataAdapter(); } /* 更行试图显示 */ public void UpdataAdapter() { // 获取数据库Phones的Cursor Cursor cur = mSQLiteDatabase.query(TABLE_NAME, new String[] { TABLE_ID, TABLE_NUM, TABLE_DATA }, null, null, null, null, null); miCount = cur.getCount(); if (cur != null && cur.getCount() >= 0) { // ListAdapter是ListView和后台数据的桥梁 ListAdapter adapter = new SimpleCursorAdapter(this, // 定义List中每一行的显示模板 // 表示每一行包含两个数据项 Android.R.layout.simple_list_item_2, // 数据库的Cursor对象 cur, // 从数据库的TABLE_NUM和TABLE_DATA两列中取数据 new String[] { TABLE_NUM, TABLE_DATA }, // 与NAME和NUMBER对应的Views new int[] { Android.R.id.text1, Android.R.id.text2 });
}
}
/* 将adapter添加到m_ListView中 */ m_ListView.setAdapter(adapter);
4.3.5 数据存储之ContentProviders
ContentProviders: Android提供的一个特殊的存储数据的类型,它提供了一套标准的接口来获取,操作数据。
查询数据:可以使用ContentProvider.query()或者Activity.managedQuery()方法。 修改数据:通过ContentResolver.update()方法可以用来修改数据。 添加数据:通过ContentResolver.insert()方法来增加一条数据。 删除数据:通过ContentResolver.delete()方法来删除一条记录。
5 程序开发
5.1 主activity的设计
当选择“新建记事本”,“编辑内容”,“删除当前记事”等菜单选项时对应的操作。 public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { // 插入一条数据 case MENU_ITEM_INSERT: Intent intent0 = new Intent(this, ActivityDiaryEditor.class); intent0.setAction(ActivityDiaryEditor.INSERT_DIARY_ACTION); intent0.setData(getIntent().getData()); startActivity(intent0); return true; // 编辑当前数据内容 case MENU_ITEM_EDIT: Intent intent = new Intent(this, ActivityDiaryEditor.class); intent.setData(item.getIntent().getData()); intent.setAction(ActivityDiaryEditor.EDIT_DIARY_ACTION); startActivity(intent); return true; // 删除当前数据 case MENU_ITEM_DELETE: Uri uri = ContentUris.withAppendedId(getIntent().getData(), getListView().getSelectedItemId()); getContentResolver().delete(uri, null, null); renderListView(); } return super.onOptionsItemSelected(item); }