收藏功能

哈哈,这个功能是经常性的做到的

那么要怎么做呢,首先是不是点击的时候收藏到本地,如果再次点击就会取消收藏,这时候就要判断说他进来的时候是有收藏还是未收藏的啦!

那我们开始吧

1.

先依赖这个implementation 'org.greenrobot:greendao:3.2.2'
apply plugin: 'org.greenrobot.greendao' // apply plugin
greendao {
    schemaVersion 1
    daoPackage 'com.test_collect'
    targetGenDir 'src/main/java'
}

 

然后再gradle中配置

classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin

配置完之后make project!!!

2.进来的时候是不是要先初始化

在application中做

public static DaoSession getDaoSession() {
        if(daoSession ==null) {
            helper = new MySQLiteOpenHelper(mContext, "test.db", null);
            SQLiteDatabase db = helper.getWritableDatabase();
            // 注意:该数据库连接属于 DaoMaster,所以多个 Session 指的是相同的数据库连接。
            DaoMaster daoMaster = new DaoMaster(db);
            daoSession = daoMaster.newSession();
        }
        return daoSession;
    }
    /**
     * 关闭所有的操作,数据库开启后,使用完毕要关闭
     */
    public void closeConnection(){
        closeHelper();
        closeDaoSession();
    }

    public void closeHelper(){
        if(helper != null){
            helper.close();
            helper = null;
        }
    }
    public void closeDaoSession(){
        if(daoSession != null){
            daoSession.clear();
            daoSession = null;
        }
    }
    public static CollectionDao getLocalAndRecomendBookDao(){
        return getDaoSession().getCollectionDao();
    }

这时候大家会发现怎么会是这个MySQLiteOpenHelper,哈哈我们后面再讲

3.接着要在收藏的界面中做初始化啦

private Collection collect;
private boolean isLocal;
//    /*初始化收藏数据库相关*/
private void initDbHelp() {
    collect = LARBManager.getBook(title);
    if(collect != null){
        img_collect.setImageResource(R.mipmap.collect_press);
        isLocal = true;
    }else {
        collect = new Collection();
        collect.setHtml(url);
        collect.setTitle(title);
        collect.setImg_url(img_url);
        collect.setContent(content);
        collect.setCount(click);
        collect.setReadtime(readtime);
        img_collect.setImageResource(R.mipmap.collection);
        isLocal = false;
    }
}

在管理器中以title 为主要的对象哈

public class LARBManager {
    public static CollectionDao dao = MyApplication.getLocalAndRecomendBookDao();
    /**
     * 得到书架的数量
     * @return
     */
    public static int getCount(){
        return (int) dao.queryBuilder().buildCount().count();
    }

    /**
     * 得到书架所有的书籍
     * @return
     */
    public static List<Collection> getAllBook(){
        return dao.queryBuilder().list();
    }
    /**
     * 根据bookid得到书籍
     * @param bookId
     * @return
     */
    public static Collection getBook(String bookId){
        if(bookId !=null) {
            return dao.queryBuilder().where(CollectionDao.Properties.Title.eq(bookId))
                    .unique();
        }
        return null;
    }
    /**
     * 添加书籍到书架
     * @param book
     */
    public static void insertBook(Collection book){
        dao.insertOrReplace(book);
    }

    public static void deleteBook(Collection book){
        dao.delete(book);
    }
    /**
     * 修改
     * @param book
     */
    public static void updateBook(Collection book){
        dao.update(book);
    }
}

关键的时候来啦

/**
 * 添加和移除     到本地(收藏)
 */
private void addAndDeleteLocal(){
    if(isLocal){
        LARBManager.deleteBook(collect);
        img_collect.setImageResource(R.mipmap.collection);
        ToastUtils.showShort(getContext(),"取消收藏了哟");
    }
    else {
        LARBManager.insertBook(collect);
        img_collect.setImageResource(R.mipmap.collect_press);
        ToastUtils.showShort(getContext(),"收藏了哟");
    }
    isLocal = !isLocal;
}

ok,这时候是不是觉得已经完成啦,哈哈哈

接着我们回到刚才的话题MySQLiteOpenHelper,这个为什么会替换成这个嘞,原本说好的是这个

public static DaoSession getDaoSession() {
       if(daoSession == null){
            DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(mContext, "book.db", null);
           SQLiteDatabase db = helper.getWritableDatabase();
            // 注意:该数据库连接属于 DaoMaster,所以多个 Session 指的是相同的数据库连接。
            DaoMaster daoMaster = new DaoMaster(db);
           daoSession = daoMaster.newSession();
            daoSession.clear();
        }
        return daoSession;
}

但是由于更新版本的时候用了这个原本的DaoMaster.DevOpenHelper里面的数据会消失

所以才用到MySQLiteOpenHelper

public class MySQLiteOpenHelper extends DaoMaster.OpenHelper {
    public MySQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory) {
        super(context, name, factory);
    }
    @Override
    public void onUpgrade(Database db, int oldVersion, int newVersion) {
        MigrationHelper.migrate(db, new MigrationHelper.ReCreateAllTableListener() {
            @Override
            public void onCreateAllTables(Database db, boolean ifNotExists) {
                DaoMaster.createAllTables(db, ifNotExists);
            }
            @Override
            public void onDropAllTables(Database db, boolean ifExists) {
                DaoMaster.dropAllTables(db, ifExists);
            }
        }, CollectionDao.class);
    }
}

主要是在上面这个方法中做操作啦~

那在收藏列表里大家知道怎么做了嘛,对啦,就是去查询资料

private List<Collection> allBook;
/**
 * 获取数据来源,用于防止在详情界面点击取消收藏退回到收藏界面时候数据还存在onResume重新调用
 */
public void getList(){
    allBook = LARBManager.getAllBook();
    if(allBook ==null ||"".equals(allBook)){
        return;
    }
    Collections.reverse(allBook);
    collect_adapter.setData(allBook);
    collect_adapter.notifyDataSetChanged();
}

这个时候就可以拿到收藏列表啦~

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值