武汉市尔佳通讯网络工程有限公司
首页 | 联系方式 | 加入收藏 | 设为首页 | 手机站

产品目录

联系方式

联系人:业务部
电话: 00123-563069
邮箱:service@paoguangji371.com

当前位置:首页 >> 新闻中心 >> 正文

Android学习:将ListView中id与数据库中id关联

字号:
摘要:Android学习:将ListView中id与数据库中id关联

做毕设过程中遇到一个问题:当用户点击ListView中条目删除相册时,需要为删除方法传递条目在数据库中对应的id,所以需要根据条目位置获取其在数据库中对应的id。

我的实现思路是:从数据库中获取id,通过for循环将其放在HashMap中,在HashMap中对应关系为:

albumHash.put(i+"", album.getAlbumid()); 即位置对应数据库中id

这样在调用删除方法时从HashMap中取出位置对应的id即可:

albumService.deleteAlbum(i+""));

核心代码如下:

操作相册的Service方法:

public class AlbumService {
 private Context context;
 private List<Album> listAlbum=null;
 public AlbumService(Context ct) {
 context = ct;
 }
 public AlbumService() {
 
 }
 // 创建相册的时候只传来相册名称即可
 public void addAlbum(String name) {
 SQLiteOpenHelper helper = new DBOpenHelper(context);
 SQLiteDatabase db = helper.getWritableDatabase();
 db.execSQL("insert into album (albumName) values ('" + name + "')");
 db.close(); // 关闭数据库
 }
 // 获取数据库中所存相册
 public List<Album> getAlbums() {
 List<Album> listAlbum = new ArrayList<Album>();
 SQLiteOpenHelper helper = new DBOpenHelper(context);
 SQLiteDatabase db = helper.getWritableDatabase();
 Cursor cursor = db.rawQuery("select * from album",null);
 while (cursor.moveToNext()) {
 Album album=new Album();
 album.setAlbumid(cursor.getInt(cursor.getColumnIndex("albumid")));
 album.setAlbumName(cursor.getString(cursor.getColumnIndex("albumName")));
 listAlbum.add(album);
 }
 db.close();
 return listAlbum;
 }
 public void deleteAlbum(Object object) {
 int sqlId=(Integer)object;
 SQLiteOpenHelper helper = new DBOpenHelper(context);
 SQLiteDatabase db = helper.getWritableDatabase();
 db.execSQL("delete from album where albumid="+sqlId);
 db.close(); // 关闭数据库
 }
}
循环遍历数据库中所存相册:
for (int i = 0; i < albums.size(); i++) {
 albumHash = new HashMap<String, Object>();
 Album album=(Album) albums.get(i);
 albumHash.put(i+"", album.getAlbumid());
 albumHash.put("album_name",album.getAlbumName() );
 albumHash.put("album_num", "0张相片");
 albumList.add(albumHash);
 }
通过相册在数据库中id对其进行删除:
albumHash=albumList.get((int)info.id);
albumService.deleteAlbum(albumHash.get((int)info.id+""));
其中(int)info.id指的是条目在ListView中的位置。

最后还有一个问题是,当数据库中只剩一个条目之后,点击“删除相册”按钮,该条目依然会存在:

数据库中“新建相册”的信息已删除,但ListView内容没有被更新:

改进,对数据库中条目数加以判断,无条目时给出提示信息,将ListView置为不可见:

private void albumListView() {
 albumList = new ArrayList<HashMap<String, Object>>();
 List albums=albumService.getAlbums();
 if(albums.size()==0){
 Toast.makeText(MyAlbumsActivity.this, "系统暂无相册", Toast.LENGTH_SHORT).show();
 myalbum_list.setVisibility(8);
 }else{
 myalbum_list.setVisibility(1);
 for (int i = 0; i < albums.size(); i++) {
 albumHash = new HashMap<String, Object>();
 Album album=(Album) albums.get(i);
 albumHash.put(i+"", album.getAlbumid());
 albumHash.put("album_name",album.getAlbumName() );
 albumHash.put("album_num", "0张相片");
 albumList.add(albumHash);
 }
 SimpleAdapter saImageItems = new SimpleAdapter(this, albumList,// 数据来源
 R.layout.myalbumlist_item, new String[] { "album_name", "album_num"},
 // 分别对应view 的id
 new int[] { R.id.album_name, R.id.album_num});
 myalbum_list.setAdapter(saImageItems);
 }
 }

成功删除最后一个条目,且其在ListView中不再显示: