工作日誌(2015.10.30)

     
一.green dao的使用
DaoMaster:一看名字就知道它是Dao中的最大的官了。它保存了sqlitedatebase對象以及操作DAO classes(注意:不是對象)。其提供了一些創建和刪除table的靜態方法,其內部類OpenHelperDevOpenHelper實現了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);//添加相應的表
    new DaoGenerator().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();
   }
 添加新表新加相應的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){
        if (daoMaster == null){
            DaoMaster.DevOpenHelper openHelper = new DaoMaster.DevOpenHelper(context, DB_NAMEnull);
            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();
  }
}
  遇到問題:發佈話題中包含多張圖片
  解決方法: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;
}

 

  
發佈了39 篇原創文章 · 獲贊 4 · 訪問量 9064
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章