import android.content.Context;import android.content.ContextWrapper;import android.database.DatabaseErrorHandler;import android.database.sqlite.SQLiteDatabase;import com.tbc.android.defaults.app.business.cache.AppUserCache;import com.tbc.android.defaults.app.utils.AppPathUtil;import com.tbc.android.mc.storage.ApplicationCache;import java.io.File;/** * Created by Doraemon * Date: 16/5/12 * Time: 09:22 * Summary:该类主要用于基于GreenDao框架自定义数据库路径 */public class GreenDaoContext extends ContextWrapper {    private String currentUserId;    private Context mContext;    public GreenDaoContext() {        super(ApplicationCache.context);        this.mContext = ApplicationCache.context;        this.currentUserId = AppUserCache.userInfo.getUserId();    }    /**     * 获得数据库路径,如果不存在,则创建对象     *     * @param dbName     */    @Override    public File getDatabasePath(String dbName) {        File baseFile = AppPathUtil.getDbCacheDir(mContext);        StringBuffer buffer = new StringBuffer();        buffer.append(baseFile.getPath());        buffer.append(File.separator);        buffer.append(currentUserId);        buffer.append(File.separator);        buffer.append(dbName);        return new File(buffer.toString());    }    /**     * 重载这个方法,是用来打开SD卡上的数据库的,android 2.3及以下会调用这个方法。     *     * @param name     * @param mode     * @param factory     */    @Override    public SQLiteDatabase openOrCreateDatabase(String name, int mode,                                               SQLiteDatabase.CursorFactory factory) {        SQLiteDatabase result = SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name), factory);        return result;    }    /**     * Android 4.0会调用此方法获取数据库。     *     * @param name     * @param mode     * @param factory     * @param errorHandler     * @see android.content.ContextWrapper#openOrCreateDatabase(java.lang.String, int,     * android.database.sqlite.SQLiteDatabase.CursorFactory,     * android.database.DatabaseErrorHandler)     */    @Override    public SQLiteDatabase openOrCreateDatabase(String name, int mode, SQLiteDatabase.CursorFactory factory,                                               DatabaseErrorHandler errorHandler) {        SQLiteDatabase result = SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name), factory);        return result;    }}

自定义一个context,然后在获取helper时,将自定义的context传入,如下:

DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(new GreenDaoContext(), "app.db", null);SQLiteDatabase db = helper.getWritableDatabase();// 注意:该数据库连接属于 DaoMaster,所以多个 Session 指的是相同的数据库连接。DaoMaster daoMaster = new DaoMaster(db);DaoSession daoSession = daoMaster.newSession();

更多相关文章

  1. Android(安卓)EditText简单实现右侧点击清除
  2. RXjava+Retrofit二级购物车
  3. Service START_NOT_STICKY、START_STICKY
  4. Android(安卓)获取手机应用信息
  5. 关于Listview的一个没有notifyDataSetChanged导致的错误
  6. Robotium 常用方法
  7. 一个android 异步多线程类介绍
  8. android异步下载图片
  9. 调用摄像头拍照并显示

随机推荐

  1. Android overlay简单总结
  2. android之 实现对搜索框输入内容(自动出
  3. Pixel修改kernel内核调试
  4. Android异步框架android-async-http-mast
  5. Android之使用AIDL时的跨进程回调—Serve
  6. Android自带的时间空间和日期控件
  7. android 添加视频、图片、录音上传(一)
  8. Android(安卓)6.0后 apk权限默认开启
  9. Ubuntu 14.04 64位机上配置Android Studi
  10. Android studio更新