美文网首页安卓
自定义Android ORM 框架greenDAO数据库文件的路

自定义Android ORM 框架greenDAO数据库文件的路

作者: 镜花水月一梦不觉 | 来源:发表于2016-05-18 19:28 被阅读3838次
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();

相关文章

网友评论

  • Yufee:在外部存储上建文件的话6.0以上需要申请权限的吧
    镜花水月一梦不觉:嗯,这不是本文的重点,如果api 23可以自行处理
  • 王而安:SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name), factory);
    出现SQLiteCantOpenDatabaseException: Could not open database异常,博主。
    镜花水月一梦不觉:你的路径不对吧
  • wbBin:AppPathUtil 类的内容发一下 大神
    镜花水月一梦不觉:这种类没必要一样啊,你只要换成你自己的数据库存储路径就行了

本文标题:自定义Android ORM 框架greenDAO数据库文件的路

本文链接:https://www.haomeiwen.com/subject/hkvwrttx.html