初识LiteOrm(2)

这里想说一下遇到的问题,和解决的方法。
首先,之前封装的那个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 !…………../

猜你喜欢

转载自blog.csdn.net/qq_23057645/article/details/65627423