我在Android应用中使用Realm database。数据需要加密,我正在使用Realm
的加密。它们的密钥来自服务器,然后存储在设备上,但使用用户密码加密。
我想注销用户 - 如果 - 无论如何 - 键是调和的。我正在使用ParentActivity
类进行一些常规初始化,并尝试在onCreate
内部执行此操作,如下所示,
private void initRealm() {
try {
if(MyApplication.getInstance().isRelamInitialized)
realm = Realm.getDefaultInstance();
} catch (IllegalStateException e) {
e.printStackTrace();
deleteAllAndLogout();
}
}
deleteAllAndLogout
如下所示,
public void deleteAllAndLogout() {
session.logoutUser();
session.removeFbData();
RealmManager.deleteAll(realm);
LoginManager.getInstance().logOut();
Intent intent = new Intent(this, LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
finish();
}
问题
Realm
尚未初始化,那么在没有realm
初始化的情况下如何清除数据?
当我测试它时,它一次又一次地开始LoginActivity
并且从未停止过。
我正在Realm
课程中初始化Application
。
public void initRealm() {
String encryptedKey = new Session(getApplicationContext()).getStringForKey(Session.mainEncryptedKeyForEncryption);
String key = new Cipher(getApplicationContext()).decrypt(encryptedKey);
Realm.init(getApplicationContext());
config = new RealmConfiguration
.Builder()
.encryptionKey(key.getBytes())
.deleteRealmIfMigrationNeeded()
.name(DB_NAME)
.schemaVersion(DB_VERSION)
.build();
Realm.setDefaultConfiguration(config);
isRelamInitialized = true;
}
问题
如果Realm
未正确解密,我将如何以及在何处删除所有本地数据和注销用户?
答案 0 :(得分:0)
如果您尝试使用错误的加密密钥打开Realm文件,Realm将抛出RealmFileException
。
因此,您需要将所有调用包装到Realm.getDefaultInstance()
,捕获异常并在发生时将用户注销。