- Java8
项目build.gradle
classpath 'io.realm:realm-gradle-plugin:10.14.0'
模块build.gradle
apply plugin: 'realm-android' - 文档参考
https://www.mongodb.com/zh-cn/docs/atlas/device-sdks/sdk/java/quick-starts/quick-start-local/ - Realm Studio 数据库查看工具
https://github.com/realm/realm-studio
http://studio-releases.realm.io/ - 生成数据库文件(默认)位置
/data/data/com.wego.wisdom/files/default.realm
/data/data/com.wego.wisdom/files/default.realm.lock
/data/data/com.wego.wisdom/files/default.realm.management
/data/data/com.wego.wisdom/files/default.realm.note - java.lang.IllegalStateException: Realm access from incorrect thread. Realm objects can only be accessed on the thread they were created.这个异常打算使用同一个线程解决,这样就可以在任意地方使用,提取了一个工具类进行参考。
-
import android.content.Context; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.Executors; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import io.realm.Realm; import io.realm.RealmConfiguration; import io.realm.exceptions.RealmMigrationNeededException; public class RealmUtils { // 实例对象 private static Realm uiThreadRealm; // 唯一线程的线程池 private static final ThreadPoolExecutor executor = new ThreadPoolExecutor( 1, // 核心线程数 1, // 最大线程数 1, // 线程存活时间 TimeUnit.MINUTES, // 时间单位 new ArrayBlockingQueue<>(50), // 工作队列 Executors.defaultThreadFactory(), // 线程工厂 new ThreadPoolExecutor.AbortPolicy() // 拒绝处理程序 ); /** * 对外提供线程执行相关操作 */ public static ThreadPoolExecutor getExecutor() { return executor; } /** * 对外提供realm实例对象 */ public static Realm getRealm() { return uiThreadRealm; } /** * 初始化 */ public static void init(Context context, String realmName) { executor.execute(() -> { Realm.init(context); RealmConfiguration config = new RealmConfiguration.Builder() .name(realmName) .allowQueriesOnUiThread(true) .allowWritesOnUiThread(true) .build(); try { uiThreadRealm = Realm.getInstance(config); } catch (RealmMigrationNeededException e) { // 数据库发生变化,删除原有的,再创建新的 Realm.deleteRealm(config); uiThreadRealm = Realm.getInstance(config); } }); } /** * 关闭 */ public static void destroy() { if (uiThreadRealm != null && !uiThreadRealm.isClosed()) { uiThreadRealm.close(); } } }
09-24
476