package com.roboo.like.google.dao.impl; import java.util.LinkedList; import android.content.ContentValues; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import com.droidux.trial.cu; import com.roboo.like.google.databases.DBHelper; import com.roboo.like.google.models.NewsTypeItem; /** * 新闻类型的操作 * * @author bo.li 2014-7-14 下午1:05:13 */ public class NewsTypeItemDaoImpl { private static final boolean DEBUG_FLAG = true; private static final String TABLE_NEWS_TYPE_LIST = "news_type_list"; private static final String NEWS_TYPE_MD5 = "news_type_md5"; private static final String NEWS_TYPE_NAME = "news_type_name"; private static final String NEWS_TYPE_ID = "news_type_id"; private static final String NEWS_TYPE_IMG = "news_type_img"; private static final String NEWS_TYPE_DESC = "news_type_desc"; private static final String NEWS_TYPE_FLAG = "news_type_flag"; private static final String NEWS_TYPE_FAV = "news_type_fav"; private static final String NEWS_TYPE_ADD_TIME = "news_type_add_time"; private static final String NEWS_TYPE_NOTE = "news_type_note"; private DBHelper mHelper; public NewsTypeItemDaoImpl(DBHelper mHelper) { super(); this.mHelper = mHelper; } /*** * 向数据库中插入已有的可以进行查看的新闻类型 * * @param items * 新闻类型列表 * @return ture 插入成功 或者 false 插入失败 */ public boolean insertNewsTypeItems(LinkedList<NewsTypeItem> items) { boolean flag = false; int insertCount = 0; SQLiteDatabase db = mHelper.getWritableDatabase(); if (items != null) { for (NewsTypeItem item : items) { if (!isNewsTypeItemExist(item.md5)) { ContentValues values = new ContentValues(); values.put(NEWS_TYPE_MD5, item.md5); values.put(NEWS_TYPE_NAME, item.name); values.put(NEWS_TYPE_ADD_TIME, item.addTime); values.put(NEWS_TYPE_FLAG, item.flag); values.put(NEWS_TYPE_FAV, item.fav); values.put(NEWS_TYPE_ID, item.id); values.put(NEWS_TYPE_IMG, item.img); values.put(NEWS_TYPE_NOTE, item.note); values.put(NEWS_TYPE_DESC, item.desc); db.insert(TABLE_NEWS_TYPE_LIST, null, values); insertCount++; } else { if (DEBUG_FLAG) { System.out.println("要添加的 新闻类型 已经存在于数据库中了……"); } } } } flag = insertCount == items.size(); return flag; } /** * 根据新闻类型的md5判断要插入的新闻类型是否已经存在于数据库中…… * * @param md5 * 新闻类型的md5 根据 name 和 img生成 * @return true 要插入的新闻类型已经存在于数据库中了 或者 false 数据库中还不存在 */ private boolean isNewsTypeItemExist(String md5) { boolean flag = false; SQLiteDatabase db = mHelper.getWritableDatabase(); Cursor cursor = db.query(true, TABLE_NEWS_TYPE_LIST, null, NEWS_TYPE_MD5 + " = ?", new String[] { md5 }, null, null, null, null); if (null != cursor) { flag = 1 == cursor.getCount(); } return flag; } /** * 获取已经插入数据库中的新闻类型列表 * * @return null 或者 LinkedList<NewsTypeItem> 对象 */ public LinkedList<NewsTypeItem> getNewsTypeItems() { LinkedList<NewsTypeItem> data = null; SQLiteDatabase db = mHelper.getWritableDatabase(); Cursor cursor = db.query(true, TABLE_NEWS_TYPE_LIST, new String[] { NEWS_TYPE_MD5, NEWS_TYPE_ID, NEWS_TYPE_NAME, NEWS_TYPE_IMG, NEWS_TYPE_FLAG, NEWS_TYPE_FAV }, null, null, null, null, NEWS_TYPE_ID + " ASC", null); if (null != cursor) { data = new LinkedList<NewsTypeItem>(); for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) { NewsTypeItem item = new NewsTypeItem(); String md5 = cursor.getString(0); int id = cursor.getInt(1); String name = cursor.getString(2); String img = cursor.getString(3); boolean flag = "1".equals(cursor.getString(4)); boolean fav = "1".equals(cursor.getString(5)); item.md5 = md5; item.id = id; item.img = img; item.flag = flag; item.name = name; item.fav = fav; data.add(item); } cursor.close(); if (data.size() == 0) { data = null; } } db.close(); return data; } /*** * 根据给定的标志参数来获取相应的新闻类型集合 * * @param flag * true 订阅过的 或者 false 没有订阅过的 * @return null 或者 LinkedList<NewsTypeItem> 对象 */ public LinkedList<NewsTypeItem> getNewsTypeItems(boolean flag) { LinkedList<NewsTypeItem> data = getNewsTypeItems(); LinkedList<NewsTypeItem> tmp = new LinkedList<NewsTypeItem>(); for (NewsTypeItem item : data) { if (item.flag == flag) { tmp.add(item); } } if (tmp.size() == 0) { tmp = null; } return tmp; } /*** * 根据md5来改变新闻类型的订阅标志 * * @param md5 * 新闻类型的md5 * @param flag * true 添加订阅 或者 false 取消订阅 * @return true 表示操作成功 */ public boolean updateFlag(String md5, boolean flag) { int rowId = -1; SQLiteDatabase db = mHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(NEWS_TYPE_FLAG, flag); rowId = db.update(TABLE_NEWS_TYPE_LIST, values, NEWS_TYPE_MD5 + " = ?", new String[] { md5 }); db.close(); return rowId > -1; } /*** * 根据md5来改变新闻类型的收藏标志 * * @param md5 * 新闻类型的md5 * @param flag * true 收藏 或者 false 取消收藏 * @return true 表示操作成功 */ public boolean updateFav(String md5, boolean fav) { int rowId = -1; SQLiteDatabase db = mHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(NEWS_TYPE_FAV, fav); rowId = db.update(TABLE_NEWS_TYPE_LIST, values, NEWS_TYPE_MD5 + " = ?", new String[] { md5 }); db.close(); return rowId > -1; } /*** * 根据md5来判断新闻类型是否收藏 * * @param md5 * 新闻类型的md5 * @return true 表示已经收藏成功 */ public boolean getFav(String md5) { boolean fav = false; SQLiteDatabase db = mHelper.getWritableDatabase(); Cursor cursor = db.query(TABLE_NEWS_TYPE_LIST, new String[] { NEWS_TYPE_FAV }, NEWS_TYPE_MD5 + " = ?", new String[] { md5 }, null, null, null); if (null != cursor && cursor.getCount() > 0) { cursor.moveToFirst(); fav = "1".equals(cursor.getString(0)); cursor.close(); } db.close(); return fav; } }