欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android开发中使用sqlite实现新闻收藏和取消收藏的功能

程序员文章站 2024-03-01 14:17:34
 之前学习oracle,简单的认为数据库只存在服务器端,学习安卓之后才发现原来android和ios本身是“携带”数据库的——sqlite,是轻量级的、嵌入式的、...

 之前学习oracle,简单的认为数据库只存在服务器端,学习安卓之后才发现原来android和ios本身是“携带”数据库的——sqlite,是轻量级的、嵌入式的、关系型数据库,是android、ios等广泛使用的的数据库系统。用于存储本地的一直状态。刚写出来一个实现新闻收藏的功能,写出来供大家参考。

  在android中我们通过sqlitedatabase这个类的对象操作sqlite数据库。由于sqlite数据库并不需要像c/s数据库那样建立连接以及身份验证的特性,以及sqlite数据库单文件数据库的特性,使得获得sqlitedatabase对象就像获得操作文件的对象那样简单。

  sqlite要经过创建数据库、创建表,然后进行增删改查等功能。所以第一步,创建一个数据库,sqliteopenhelper是一个抽象类,来管理数据库的创建和版本的管理。要使用它必须实现它的ncreate(sqlitedatabase),onupgrade(sqlitedatabase, int, int)方法

//创建数据库,建表
privatestaticfinal string dbname="news.db";
privatestaticfinalint version=3; //设置版本号
privatestaticfinal string tbl_detailnews="news"; //创建表名为news的表
privatestaticfinal string tbl_detailnews_column_title="_title"; 
privatestaticfinal string tbl_detailnews_column_url="_url";
privatestaticfinal string tbl_detailnews_column_docid="_docid";
privatestaticfinal string tbl_detailnews_column_state="_state"; 
public newsdbhelper(context context){
super(context,dbname,null,version);
}
@override
publicvoid oncreate(sqlitedatabase db) {
// todo auto-generated method stub16 stringbuffer sb=new stringbuffer();
sb.append("create table if not exists ");
sb.append(tbl_detailnews+"(");
sb.append(tbl_detailnews_column_docid +" varchar(100) primary key ,"); //设置主键
sb.append(tbl_detailnews_column_title+ " varchar(100) ,");
sb.append(tbl_detailnews_column_url+" varchar(100) ,");
sb.append(tbl_detailnews_column_state+" integer ");
sb.append(")");
db.execsql(sb.tostring()); 
}
@override
publicvoid onupgrade(sqlitedatabase db, int oldversion, int newversion) {
string sql2="drop table if exists "+tbl_detailnews;
db.execsql(sql2); //创建
oncreate(db);
}

   android提供了一个名为sqlitedatabase的类,它封装了一些操作数据库的api。使用它能实现基本的crud操作,通过getwritabledatabase()和getreadabledatabase()可以获取数据库实例,便可以写一些dao层的方法来进行对表的操作:

publicclass detailnewsdao {
private newsdbhelper helper;
public detailnewsdao(context context){ 
helper=new newsdbhelper(context); //与数据库建立连接 }
//插入数据
publicvoid insertdetsilnews(news news){
sqlitedatabase db=helper.getwritabledatabase(); 
db.execsql("insert into news(_title,_url,_docid)" + //将要收藏新闻的标题title,标识docid,详细地址url传入数据库,便可以依此打开新闻详显 "values(?,?,?)",new string[]{news.gettitle(),news.getdetailurl(),news.getdocid()});
db.close();
}
//删除数据
publicvoid del(string docid){ //根据传入参数docid删除数据 sqlitedatabase db=helper.getreadabledatabase();
db.execsql("delete from news where _docid = ?",new object[]{docid});
db.close();
}
//查询数据
public list<news> findselected(){
sqlitedatabase db=helper.getreadabledatabase();
cursor c=db.rawquery("select * from news", null); //只有对数据进行查询时,才用rawquery(),增、删、改和建表,都用execsql() list<news> list=new arraylist<news>();
while(c.movetonext()){
news news=new news();
news.settitle(c.getstring(c.getcolumnindex("_title")));
news.setdetailurl(c.getstring(c.getcolumnindex("_url")));
news.setdocid(c.getstring(c.getcolumnindex("_docid")));
list.add(news);
}
c.close();
db.close();
return list;
}
}

Android开发中使用sqlite实现新闻收藏和取消收藏的功能

用actionbar做好菜单按钮,点击收藏,执行代码 :

if(item.gettitle().equals("收藏")){    
toast.maketext(this,"收藏成功", toast.length_long).show();
detailnewsdao.insertdetsilnews(news);
item.settitle("取消收藏");
}else{
detailnewsdao.del(news.getdocid());
toast.maketext(this,"取消收藏", toast.length_long).show();
item.settitle("收藏");
}

以上所述是小编给大家介绍的android开发中使用sqlite实现新闻收藏和取消收藏的功能,希望对大家有所帮助