我已经完成了这个问题和类似的问题,但我仍然无法弄清楚这一点。
早些时候我SQLite
用于我的android应用程序。预填充的 Sqlite数据库的大小约为 15 MB。我制作了一个临时的 android 应用程序,将我的记录复制到一个新的 Realm 数据库中。这个新的 Realm 数据库的大小约为 150 MB。然后我用Mac中的Realm浏览器打开它并压缩它。大小现在减少到 15 MB。
但是,如果我在创建新数据库并将sqlite行复制到其中时使用加密,则大小约为 150 MB。当我使用十六进制密码打开它时,它可以正常打开。然后我像之前一样压缩它-> 大小恢复到正常的 15 MB。但是,我不知道为什么,加密现在被删除了。
为了解决这个问题,我只能想到一种解决方案。如果我可以对已经压缩的 Realm 数据库应用加密。但是,我想不通,如何在 Android 中做到这一点?
编辑 - 一些相关部分 -
第1部分 -
Realm.init(this);
byte[] key = new byte[64]; // Just for demonstration
RealmConfiguration config = new RealmConfiguration.Builder()
.name("QBank.realm")
.directory(getExternalFilesDir(null))
.encryptionKey(key)
.build();
Realm realm = Realm.getInstance(config);
第2部分 -
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.button_sqlite2realm:
DatabaseAccess databaseAccess = DatabaseAccess.getInstance(this);
databaseAccess.open();
questionsList = databaseAccess.getAllQuestions();
databaseAccess.close();
Realm realm = Realm.getInstance(config);
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
for (QuestionBank question : questionsList){
realm.copyToRealmOrUpdate(question);
}
}
});
break;
}
}
将加密数据库转换为压缩数据库->我从android模拟器中提取了这个领域数据库->在领域浏览器中打开它(使用十六进制密码)->压缩(但是这个新创建的压缩数据库现在没有加密)
PS - 我知道我的问题是描述性的,但我找不到办法做到这一点。