初识LiteOrm(2)

    xiaoxiao2021-03-25  29

    这里想说一下遇到的问题,和解决的方法。 首先,之前封装的那个DatabaseManager中的两个queryAll不好用,参数写的有问题(:P),我就加了个新方法。

    public <T> int update(Class<T> tClass, String where, String[] args, String[] args2, String[]args3){ return liteOrm.update(new WhereBuilder(tClass, where, args),new ColumnsValue(args2, args3) , ConflictAlgorithm.None); }

    这个方法就是调用LiteOrm的update,然后其中的参数也是按照LiteOrm的参数添上去的。 额。感觉就是强行用了一下LiteOrm原本的update。 我的需求是,想记录我收藏过的视频,下面是实体类bean的代码:

    @Table("Course") public class CourseBean { @PrimaryKey(AssignType.AUTO_INCREMENT) private int id; private int movieId; private boolean isCollected; public CourseBean(int movieId, boolean isCollected) { this.movieId = movieId; this.isCollected = isCollected; } public int getMovieId() { return movieId; } public void setMovieId(int movieId) { this.movieId = movieId; } public boolean isCollected() { return isCollected; } public void setCollected(boolean collected) { isCollected = collected; } }

    实体类中含有三个属性,一个是id,自增长的主键。还有视频id和是否已收藏的boolean值。 之前忘了加主键的那个@,结果就出错了。一开始是以movieId作为主键的,在插入的时候发生了primarykey must be unique 的异常。改成现在这样就好了。

    在界面初始化时候,先初始化收藏状态,使用成员变量isCollected记录:

    //使用封装的线程池 MyThreadPool.getInstance().getThreadPoolExecutor().execute(new Runnable() { @Override public void run() { //查询表中所有数据 List<CourseBean> courseBeanArrayList = DatabaseManager.getInstance() .getQueryAll(CourseBean.class); CourseBean nowBean = null; //遍历数据,找到此次的movieId就保存到nowBean中 for (CourseBean courseBean : courseBeanArrayList) { if (courseBean.getMovieId() == movieId) { nowBean = courseBean; Log.e(TAG, "run: i find it"); } } Log.e(TAG, "run: " + courseBeanArrayList.size()); //如果为null或者被收藏属性为false,设置相应的变化 if (nowBean == null || !nowBean.isCollected()) { isCollected = false; runOnUiThread(new Runnable() { @Override public void run() { collectImg.setImageResource(R.mipmap.toolbar_collection_btn_normal); } }); } else { isCollected = true; runOnUiThread(new Runnable() { @Override public void run() { collectImg.setImageResource(R.mipmap.toolbar_collection_btn_pressed); } }); } } });

    收藏按钮被点击时候的点击事件为:

    case R.id.course_collect: //判断是否被收藏 if (isCollected) { //判断是是否为第一次创建数据库,是的话,需要先进行insert操作,数据库才会被创建 if (isFirst) { isFirst = false; CourseBean courseBean = new CourseBean(movieId, false); DatabaseManager.getInstance().insert(courseBean); Log.e(TAG, "onClick: addnew false first" + movieId); }else{ //先进行更新操作,如果获得的更新行数为0,则代表该movieId数据尚未被录入,需要insert int rows = DatabaseManager.getInstance().update(CourseBean.class, "movieId=?", new String[]{"" + movieId}, new String[]{"isCollected"}, new String[]{"false"}); Log.e(TAG, "onClick: update false"); if(rows == 0){ CourseBean courseBean = new CourseBean(movieId, false); DatabaseManager.getInstance().insert(courseBean); Log.e(TAG, "onClick: addnew false 0" + movieId); } } collectImg.setImageResource(R.mipmap.toolbar_collection_btn_normal); isCollected = false; } else { if (isFirst) { isFirst = false; CourseBean courseBean = new CourseBean(movieId, true); DatabaseManager.getInstance().insert(courseBean); Log.e(TAG, "onClick: addnew true first" + movieId); }else{ int rows = DatabaseManager.getInstance().update(CourseBean.class, "movieId=?",new String[]{"" + movieId}, new String[]{"isCollected"}, new String[]{"true"}); Log.e(TAG, "onClick: update true"); if(rows == 0){ CourseBean courseBean = new CourseBean(movieId, true); DatabaseManager.getInstance().insert(courseBean); Log.e(TAG, "onClick: addnew true 0" + movieId); } } collectImg.setImageResource(R.mipmap.toolbar_collection_btn_pressed); isCollected = true; } break;

    就是记得如果第一次使用数据库先调用insert再调用其它方法。 /…………后记: 坑了整整一晚上,还是会的太少了,Come on !…………../

    转载请注明原文地址: https://ju.6miu.com/read-150201.html

    最新回复(0)