一 . 关于 GreenDao 与 SQLite 数据库 ,javaObject的关系
简单的讲,greenDAO 是一个将对象映射到 SQLite 数据库中的轻量且快速的 ORM 解决方案。
二. 在AndroidStudio 工程中配置GreenD Generayor mo
1.在 .src/main 目录下新建一个与 java 同层级的「java-gen」目录,用于存放由 greenDAO 生成的 Bean、DAO、DaoMaster、DaoSession 等类
2 通过 File -> New -> New Module -> Java Library -> 填写相应的包名与类名 -> Finish.
编写你的Java类
/** * GreenDao生成器 */ public class MyGreenDao { //辅助文件生成的相对路径 public static final String DAO_PATH = "app/src/main/java-gen"; //辅助文件的包名 public static final String PACKAGE_NAME = "com.source.greendao"; //数据库的版本号 public static final int VERSION_CODE = 1; public static void main(String[] arg) throws Exception { /** 你创建了一个用于添加实体(Entity)的模式(Schema)对象。 两个参数分别代表:数据库版本号与自动生成代码的包路径。*/ Schema schema=new Schema(VERSION_CODE,PACKAGE_NAME); //用对象添加实体表名,获得实体, addCache(schema,"FreshNewsCache"); addCache(schema, "PictureCache"); addCache(schema, "SisterCache"); addCache(schema, "JokeCache"); addCache(schema, "VideoCache"); //这一步生成 相应的 Cache ,CacheDao ,DaoSession,DaoMaster 文件 new DaoGenerator().generateAll(schema,DAO_PATH); } private static void addCache(Schema schema,String tablename){ Entity entity=schema.addEntity(tablename); //添加表的列项 entity.addIdProperty().primaryKey().autoincrement(); entity.addStringProperty("result"); entity.addIntProperty("page"); entity.addLongProperty("time"); }
运行 MyGreenDao,生成响应的文件
最后写一个Cache 管理类 用于向缓冲表里面 写入数据和查询数据
public abstract class BaseCache<T> { public static final String DB_NAME = "jiandan-db"; protected static DaoSession mDaoSession; public abstract void clearAllCache(); public abstract ArrayList<T> getCacheByPage(int page); public abstract void addResultCache(String result, int page); }
public class FreshCacheManager extends BaseCache { private static FreshCacheManager instance; private static FreshNewsCacheDao mFreshNewsCacheDao; public static FreshCacheManager getInstance(Context context){ if(instance==null){ synchronized (FreshCacheManager.class){ if(instance==null){ instance=new FreshCacheManager(); } } mDaoSession = APP.getDaoSession(context); //获取数据库 mFreshNewsCacheDao = mDaoSession.getFreshNewsCacheDao(); } return instance; } @Override public void clearAllCache() { mFreshNewsCacheDao.deleteAll(); } @Override public ArrayList<FreshNews> getCacheByPage(int page) { QueryBuilder<FreshNewsCache> queryBuilder=mFreshNewsCacheDao.queryBuilder() .where(FreshNewsCacheDao.Properties.Page.eq(""+page)); if(queryBuilder.list().size()>0){ try{ Log.d("DDD","Str="+queryBuilder.list().get(0).getResult()); // return FreshNews.parse(new JSONArray(queryBuilder.list().get(0).getResult())); String string=queryBuilder.list().get(0).getResult(); return ((ArrayList<FreshNews>) JSONParser.toObject(string, new TypeToken<ArrayList<FreshNews>>(){}.getType())); }catch (Exception e){ e.printStackTrace(); } }else { Log.d("DDD","大小为0"); return new ArrayList<>(); } return null; } @Override public void addResultCache(String result, int page) { Log.d("DDD","result="+result); FreshNewsCache freshNewsCache=new FreshNewsCache(); freshNewsCache.setResult(result); freshNewsCache.setPage(page); freshNewsCache.setTime(System.currentTimeMillis()); //插入到数据库 mFreshNewsCacheDao.insert(freshNewsCache); } }
到这里就完成了 之后再工程里调用 AddResultCache 和getCacheByPage 两个函数就可以了