工作日志(2015.10.30)
来源:互联网 发布:织梦cms如何仿站 编辑:程序博客网 时间:2024/05/18 09:56
一.green dao的使用
DaoMaster:一看名字就知道它是Dao中的最大的官了。它保存了sqlitedatebase对象以及操作DAO classes(注意:不是对象)。其提供了一些创建和删除table的静态方法,其内部类OpenHelper和DevOpenHelper实现了SQLiteOpenHelper并创建数据库的框架。
DaoSession:会话层。操作具体的DAO对象(注意:是对象),比如各种getter方法。
XXXDao:实际生成的某某DAO类,通常对应具体的java类,比如NoteDao等。其有更多的权限和方法来操作数据库元素。
XXXEntity:持久的实体对象。通常代表了一个数据库row的标准java properties。
如下一个实例初始化代码:
1
2
3
4
5
helper =
new
DaoMaster.DevOpenHelper(
this
,
"notes-db"
,
null
);
db = helper.getWritableDatabase();
daoMaster =
new
DaoMaster(db);
daoSession = daoMaster.newSession();
noteDao = daoSession.getNoteDao();
即:先创建了一个SQLiteOpenHelper并创建连接到一个具体数据库;再根据具体的datebase创建一个master对象用于;最后通过master创建一个数据库的会话操作。
1.DaoMaster相当于sqlite中的DBHelper类,创建数据库,获取数据库的操作对象。他是里面包含了对DBHelper的操作
2.这四个类都是自动生成的。
四个文件的生成
public static void main(String[] args)throws Exception {
//第一个参数是数据库版本号,第二个参数是包名,即生成的Dao文件会在这个包下
Schema schema = new Schema(1,"com.onlybeyond.test.greendao");
addUser(schema);//添加相应的表
//第一个参数是数据库版本号,第二个参数是包名,即生成的Dao文件会在这个包下
Schema schema = new Schema(1,"com.onlybeyond.test.greendao");
addUser(schema);//添加相应的表
newDaoGenerator().generateAll(schema,"src/gen”);//输出到相应的文件
}
private static void addUser(Schema schema){
Entity user = schema.addEntity("Publish");
user.addIdProperty().autoincrement().primaryKey();
user.addIntProperty("img").unique().notNull();
user.addStringProperty("voice").notNull();
Entity user = schema.addEntity("Publish");
user.addIdProperty().autoincrement().primaryKey();
user.addIntProperty("img").unique().notNull();
user.addStringProperty("voice").notNull();
}
添加新表新加相应的add方法即可。
每回新建表或者修改表的属性都得重新生成四类文件,当然也可以直接修改四类文件,但在没完全明白原理前,出错率会很高。
获取对象
建一个类统一管理数据库操作
public class DBHelper {
private static final String DB_NAME = "medical.db";
private static DaoMaster daoMaster;
private static DaoSession daoSession;
private static DaoMaster getDaoMaster(Context context){
private static final String DB_NAME = "medical.db";
private static DaoMaster daoMaster;
private static DaoSession daoSession;
private static DaoMaster getDaoMaster(Context context){
if (daoMaster == null){
DaoMaster.DevOpenHelper openHelper = new DaoMaster.DevOpenHelper(context, DB_NAME, null);
SQLiteDatabase db = openHelper.getWritableDatabase();
daoMaster = new DaoMaster(db);
}
return daoMaster;
}
public static DaoSession getDaoSession(Context context){
if (daoSession == null){
if (daoMaster == null){
daoMaster = getDaoMaster(context);
}
daoSession = daoMaster.newSession();
}
return daoSession;
}
// 通过得到的DaoSession,可以获取对相应表进行操作的Dao类;待数据库表确定后,数据库操作方法
SQLiteDatabase db = openHelper.getWritableDatabase();
daoMaster = new DaoMaster(db);
}
return daoMaster;
}
public static DaoSession getDaoSession(Context context){
if (daoSession == null){
if (daoMaster == null){
daoMaster = getDaoMaster(context);
}
daoSession = daoMaster.newSession();
}
return daoSession;
}
// 通过得到的DaoSession,可以获取对相应表进行操作的Dao类;待数据库表确定后,数据库操作方法
// 均写在此处,方便统一调用。
public static long addPublish(Context context,Publish publish){
DaoSession daoSession=getDaoSession(context);
PublishDao publishDao = daoSession.getPublishDao();
long insert = publishDao.insert(publish);
return insert;
}
public static void deletePublish(Context context,Publish publish){
DaoSession daoSession = getDaoSession(context);
PublishDao publishDao = daoSession.getPublishDao();
publishDao.delete(publish);
}
public static void updatePublish(Context context,Publish publish){
DaoSession daoSession = getDaoSession(context);
PublishDao publishDao = daoSession.getPublishDao();
publishDao.update(publish);
}
public static List<Publish> queryPublish(Context context,Publish publish,WhereCondition whereCondition,WhereCondition...whereConditions){
DaoSession daoSession = getDaoSession(context);
PublishDao publishDao = daoSession.getPublishDao();
QueryBuilder<Publish> publishQueryBuilder = publishDao.queryBuilder();
return publishQueryBuilder.where(whereCondition,whereConditions).list();
}
public static Publish queryPublish(Context context){
Publish publish=null;
DaoSession daoSession = getDaoSession(context);
PublishDao publishDao = daoSession.getPublishDao();
QueryBuilder<Publish> publishQueryBuilder = publishDao.queryBuilder();
if(publishQueryBuilder!=null) {
List<Publish> list = publishQueryBuilder.list();
if (list != null && list.size() > 0) {
publish = list.get(0);
}
}
return publish;
}
public static void cleanAllPublish(Context context){
DaoSession daoSession = getDaoSession(context);
PublishDao publishDao = daoSession.getPublishDao();
publishDao.deleteAll();
DaoSession daoSession=getDaoSession(context);
PublishDao publishDao = daoSession.getPublishDao();
long insert = publishDao.insert(publish);
return insert;
}
public static void deletePublish(Context context,Publish publish){
DaoSession daoSession = getDaoSession(context);
PublishDao publishDao = daoSession.getPublishDao();
publishDao.delete(publish);
}
public static void updatePublish(Context context,Publish publish){
DaoSession daoSession = getDaoSession(context);
PublishDao publishDao = daoSession.getPublishDao();
publishDao.update(publish);
}
public static List<Publish> queryPublish(Context context,Publish publish,WhereCondition whereCondition,WhereCondition...whereConditions){
DaoSession daoSession = getDaoSession(context);
PublishDao publishDao = daoSession.getPublishDao();
QueryBuilder<Publish> publishQueryBuilder = publishDao.queryBuilder();
return publishQueryBuilder.where(whereCondition,whereConditions).list();
}
public static Publish queryPublish(Context context){
Publish publish=null;
DaoSession daoSession = getDaoSession(context);
PublishDao publishDao = daoSession.getPublishDao();
QueryBuilder<Publish> publishQueryBuilder = publishDao.queryBuilder();
if(publishQueryBuilder!=null) {
List<Publish> list = publishQueryBuilder.list();
if (list != null && list.size() > 0) {
publish = list.get(0);
}
}
return publish;
}
public static void cleanAllPublish(Context context){
DaoSession daoSession = getDaoSession(context);
PublishDao publishDao = daoSession.getPublishDao();
publishDao.deleteAll();
}
}
遇到问题:发布话题中包含多张图片
解决方法:1.再建一张图片的表,然后进行关联
2.用逗号进行分割
选中方法:用逗号进行分割
二、获取视频的缩略图
/**
* 获取视频的缩略图
* 先通过ThumbnailUtils来创建一个视频的缩略图,然后再利用ThumbnailUtils来生成指定大小的缩略图。
* 如果想要的缩略图的宽和高都小于MICRO_KIND,则类型要使用MICRO_KIND作为kind的值,这样会节省内存。
* @param videoPath 视频的路径
* @param width 指定输出视频缩略图的宽度
* @param height 指定输出视频缩略图的高度度
* @param kind 参照MediaStore.Images.Thumbnails类中的常量MINI_KIND和MICRO_KIND。
* 其中,MINI_KIND: 512 x 384,MICRO_KIND: 96 x 96
* @return 指定大小的视频缩略图
*/
public static Bitmap getVideoThumbnail(String videoPath, int width, int height,
int kind) {
Bitmap bitmap = null;
// 获取视频的缩略图
bitmap = ThumbnailUtils.createVideoThumbnail(videoPath, kind);
System.out.println("w"+bitmap.getWidth());
System.out.println("h"+bitmap.getHeight());
bitmap = ThumbnailUtils.extractThumbnail(bitmap, width, height,
ThumbnailUtils.OPTIONS_RECYCLE_INPUT);
return bitmap;
}
* 获取视频的缩略图
* 先通过ThumbnailUtils来创建一个视频的缩略图,然后再利用ThumbnailUtils来生成指定大小的缩略图。
* 如果想要的缩略图的宽和高都小于MICRO_KIND,则类型要使用MICRO_KIND作为kind的值,这样会节省内存。
* @param videoPath 视频的路径
* @param width 指定输出视频缩略图的宽度
* @param height 指定输出视频缩略图的高度度
* @param kind 参照MediaStore.Images.Thumbnails类中的常量MINI_KIND和MICRO_KIND。
* 其中,MINI_KIND: 512 x 384,MICRO_KIND: 96 x 96
* @return 指定大小的视频缩略图
*/
public static Bitmap getVideoThumbnail(String videoPath, int width, int height,
int kind) {
Bitmap bitmap = null;
// 获取视频的缩略图
bitmap = ThumbnailUtils.createVideoThumbnail(videoPath, kind);
System.out.println("w"+bitmap.getWidth());
System.out.println("h"+bitmap.getHeight());
bitmap = ThumbnailUtils.extractThumbnail(bitmap, width, height,
ThumbnailUtils.OPTIONS_RECYCLE_INPUT);
return bitmap;
}
0 0
- 工作日志(2015.10.30)
- 工作日志---2015.1.30
- 工作日志(2004.11)
- 工作日志(2004.12)
- 工作日志(2005.01)
- 工作日志(2005.02)
- 工作日志(2005.03)
- 工作日志(2005.04)
- 工作日志(2005.09)
- 工作日志(10.21)
- 工作日志(一)
- 工作日志(一)
- 工作日志(一)
- 工作日志(二)
- 工作日志12/30/2006
- 工作日志2014-06-30
- 工作日志2014-07-30
- 2015.1.30_工作日志
- 出门问问面试题2016
- 二叉树路径求和
- 使用Genymotion调试出现错误INSTALL_FAILED_CPU_ABI_INCOMPATI
- 三目运算符"?:"的透彻分析
- UIPressPhase API
- 工作日志(2015.10.30)
- android---(async-http)
- 详解VMware Workstation 12 安装虚拟机
- Java实现简易的文本编辑器
- 黑马程序员——反射其他
- 【Nutch】Solr4.6搭建
- Nutz笔记-数据库篇
- Single Number II
- tabbarcontronller