| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> Realm数据库使用教程(七),Android高级 -> 正文阅读 |
|
[移动开发]Realm数据库使用教程(七),Android高级 |
import android.app.Application; import android.content.Context; import com.facebook.stetho.Stetho; import com.uphyca.stetho_realm.RealmInspectorModulesProvider; import java.security.SecureRandom; import io.realm.Realm; import io.realm.RealmConfiguration; import tsou.com.simple.realmtest.migration.CustomMigration; import tsou.com.simple.realmtest.utils.UIUtils; /**
*/ public class MyApplication extends Application { /**
*/ private static MyApplication instance; private static RealmConfiguration config; private static String key = “huangxiaoguo1234”; @Override public void onCreate() { super.onCreate(); /**
*/ Stetho.initialize( Stetho.newInitializerBuilder(this) .enableDumpapp(Stetho.defaultDumperPluginsProvider(this)) .enableWebKitInspector(RealmInspectorModulesProvider.builder(this).bui
ld()) .build()); Realm.init(this); instance = this; new SecureRandom().nextBytes(UIUtils.getRealmKey(key)); config = new RealmConfiguration.Builder() .name(“huangxiaoguo.realm”)//指定数据库的名称。如不指定默认名为default。 .encryptionKey(UIUtils.getRealmKey(key))//指定数据库的密钥。 .schemaVersion(1) // .deleteRealmIfMigrationNeeded()//声明版本冲突时自动删除原数据库,开发时候打开 .migration(new CustomMigration())//指定迁移操作的迁移类。 // .inMemory()// 声明数据库只在内存中持久化 .build(); // mRealm = Realm.getDefaultInstance(); // mRealm = Realm.getInstance(config); } public static Context getInstance() { return instance; } public static RealmConfiguration getRealmConfiguration() { return config; } } 数据库加密完成! Realm使用注意事项
eg: 异步删除:先查找到数据(无效) //失败(原因是因为线程限制) final RealmResults students4 = mRealm.where(Student.class).findAll(); realmAsyncTask = mRealm.executeTransactionAsync(new Realm.Transaction() { @Override public void execute(Realm realm) { students4.deleteFromRealm(0); students4.deleteFirstFromRealm(); students4.deleteLastFromRealm(); students4.deleteAllFromRealm(); } }, new Realm.Transaction.OnSuccess() { @Override public void onSuccess() { UIUtils.showToast(“删除成功”); } }, new Realm.Transaction.OnError() { @Override public void onError(Throwable error) { UIUtils.showToast(“删除失败”); } }); deleteAll()(崩溃) //崩溃(原因是因为线程限制) mRealm.deleteAll(); delete(xxx.class)(崩溃) //崩溃(原因是因为线程限制) mRealm.delete(Student.class); Intent:传递对象(崩溃) 这种做法是不允许的,即使你User实现了Serializable接口 RealmResults users = mRealm.where(User.class).findAll(); if (users.size() > 0) { User user = users.get(0); Intent intent = new Intent(this, TestActivity.class); intent.putExtra(“user”, user); startActivity(intent); }else { UIUtils.showToast(“数据库没有数据”); } 以上做法均是Realm不允许的做法! 一、 RealmObject自带线程保护功能,只能在创建它的线程中访问,在子线程中不能访问。 也就是说,如果你在主线程中new了一个RealmObject对象 user,那么在子线程中是访问不了user对象的。 要想在子线程中访问,必须先将user存入Ream中,然后在子线程中query出来。 二、 如果Realm关闭,所有查询得到的RealmObject都不能使用了。 如果想在子线程中去查询数据,然后在主线程中使用是无法做到的。所以Realm提供的异步查询就很重要了… 三、如果想在Realm.close()之后继续操作,需要查询得到的对象 四、如果直接修改或删除query得到的数据,必须在transaction中完成… 也就是说,你根本不能把query返回的对象,当成普通对象去赋值或删除,如果想要直接操作…,把对象copy一份传出来…
//你不可以直接通过 intent传递 RealmObject,建议你只传递RealmObject的标识符。 RealmResults all = mRealm.where(User.class).findAll(); if (all.size() > 0) { int id = all.get(0).getId(); Intent intent = new Intent(this, TestActivity.class); intent.putExtra(“id”, id); startActivity(intent); }else { UIUtils.showToast(“数据库没有数据”); } 然后在下个页面重新查询数据库 mRealm = UIUtils.getRealmInstance(); int id = getIntent().getIntExtra(“id”, -1); |
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 7:24:53- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |