greendao如何实现每个用户一个数据库,这样做是因为当一个用户登录后,会存储很多的数据到greendao中,如果用户退出登录,用其它帐号进行登录时,这时greendao不能自动的切换到当前登录用户的数据库,目前数据库的格式为app-userid.db;只能将应用退出后再重新开应用才会切换数据库,这样感觉体验不是很好,如何再不退出应用,从登录进入时切换到对应的用户数据库????

解决方案 »

  1.   

    肯定是可以的撒, 重新登陆的时候, 你把原数据库关闭, 然后打开新的数据库文件就可以了.
    一般都会调用 mHelper = new DaoMaster.DevOpenHelper(mContext, DbFileName);来指定数据库文件撒.
    你在重新登陆的时候, 就把这个相关的Database对象和DaoSession对象关闭, 瑞把helper关闭.  然后使用新数据库文件全部重新构造前面那些对象 .
      

  2.   


    不行的,试过好多次了重新实例化mHelper = new DaoMaster.DevOpenHelper(mContext, DbFileName);都不行
    如果把数据库关了,再实例化mHelper = new DaoMaster.DevOpenHelper(mContext, DbFileName);,这时会报错,提示数据库已经关闭,而且还没有提供db.open的函数
      

  3.   

    不可能不行.
    我最近实现的一个数据库简单的备份还原就是这么做的.  
    没有考虑数据合并之类的, 直接把db文件覆盖
    DaoManager.close();
                    if( MobileUtil.fileCopy(fileName, path) )
                    {
                        SLog.i("恢复数据库:"+fileName+"成功");
                        MobileUtil.showToast("还原成功");
                        finish();
                    }
                    else
                    {
                        SLog.i("恢复数据库:"+fileName+"失败");
                        MobileUtil.showToast("还原失败");
                        finish();
                    }
                    DaoManager.getObj();package com.hotail.hx.huaxiahotail.dao;
    import android.content.Context;import org.greenrobot.greendao.database.Database;/**
     * Created by sxh on 2018/1/6.
     */public class DaoManager
    {
        private static Context mContext;
        private DaoSession daoSession;
        public static final String DbFileName = "HuaXiaDatabase.db";
        public static void setApplication(Context ctx)
        {
            mContext  = ctx;
        }
        DaoMaster.DevOpenHelper mHelper;
        Database mDatabase;
        private DaoManager()
        {
            mHelper = new DaoMaster.DevOpenHelper(mContext, DbFileName);
            mDatabase =  mHelper.getWritableDb();
            daoSession = new DaoMaster(mDatabase).newSession();
            MarkFlagDao.createTable(mDatabase,true);
        }
        private static DaoManager sInstance = null;
        public static DaoManager getObj() {
            synchronized (DaoManager.class) {
                if (sInstance == null) {
                    sInstance = new DaoManager();
                }
            }
            return sInstance;
        }    public static DaoSession getSession()
        {
            return getObj().daoSession;
        }    public static void close()
        {
            if(sInstance!=null)
            {
                sInstance.daoSession.clear();
                sInstance.mDatabase.close();
                sInstance.mHelper.close();
                sInstance = null;
            }
        }}