greendao如何实现每个用户一个数据库,这样做是因为当一个用户登录后,会存储很多的数据到greendao中,如果用户退出登录,用其它帐号进行登录时,这时greendao不能自动的切换到当前登录用户的数据库,目前数据库的格式为app-userid.db;只能将应用退出后再重新开应用才会切换数据库,这样感觉体验不是很好,如何再不退出应用,从登录进入时切换到对应的用户数据库????
解决方案 »
- android 提示界面问题
- drawBitmap(..., Paint paint)最后一个参数的疑惑?
- 串口信息如何以十六制显示
- 在layout下面的xml中编辑控件的时候光标胡乱显示 求助!!!!
- 左键、右键在手机上没有,如何改进呢?
- 100分的hello android问题救助
- 请问使用android系统的平板电脑能实现 USB数据通信吗 ?(高手指教)
- 开发环境的配置,联网down东西的时候,是不是很麻烦?
- java 读取 dat文件 乱码
- Android studio 虚拟运行不了
- AndroidStudio3.0 gradle问题
- 【50分】OKHttp session cookies问题
一般都会调用 mHelper = new DaoMaster.DevOpenHelper(mContext, DbFileName);来指定数据库文件撒.
你在重新登陆的时候, 就把这个相关的Database对象和DaoSession对象关闭, 瑞把helper关闭. 然后使用新数据库文件全部重新构造前面那些对象 .
不行的,试过好多次了重新实例化mHelper = new DaoMaster.DevOpenHelper(mContext, DbFileName);都不行
如果把数据库关了,再实例化mHelper = new DaoMaster.DevOpenHelper(mContext, DbFileName);,这时会报错,提示数据库已经关闭,而且还没有提供db.open的函数
我最近实现的一个数据库简单的备份还原就是这么做的.
没有考虑数据合并之类的, 直接把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;
}
}}