ObjectBox - 另一个 BoxStore 仍然为此目录打开
ObjectBox - Another BoxStore is still open for this directory
所以我将 ObjectBox 与一个名为 LibGDX 的库一起使用,这是一个用 java 编写的跨平台游戏库。它的工作原理是在单个 Android Activity class 中加载类似于 Java 小程序的内容,但所有工作都在小程序中完成,而 none 在Android(除了实例化 Activity)。
因此,我的 objectBox 代码在 Java 中,无法使用上下文。我因此运行
boxStore = MyObjectBox.builder().androidContext(this).build();
每次我在应用程序启动时创建数据库对象时,我都会运行使用以下代码。
private void createMyObjectBox() throws IOException {
FileHandle fileHandle = Gdx.files.local("objectstorefile");
if(!fileHandle.isDirectory()) {
fileHandle.mkdirs();
}
store = MyObjectBox.builder().directory(boxStoreDir).build();
}
我遇到了这个崩溃,如果我启动我的应用程序,然后立即按下主页按钮,然后再次启动它。我认为还有一个残留的 MyObjectBox 对象仍然存在,可能是由于 Android 和静态对象等的性质,没有被完全处理。
我不确定如何对此进行测试以避免错误。
在任何时候,每个目录都应该始终只有一个 MyObjectBox 实例处于活动状态。因此,您应该关闭旧存储 (store.close()
),或者保持存储打开(例如单例、静态等)。后者通常是首选,因为它更简单、更高效。
更新:非Android代码示例
static BoxStore store;
public static BoxStore getStore() {
if(store == null) store = createMyObjectBox();
return store;
}
你可以用这种方式
public class ObjectBox {
private static BoxStore boxStore;
public static void init(Context context) {
if (boxStore==null)
boxStore = MyObjectBox.builder().androidContext(context.getApplicationContext()).build();
}
public static BoxStore get() {
return boxStore;
}
在 Kotlin 中,您可以像这样制作“自制”单例。这应该可以解决您的问题:
companion object{
var times:Boolean = false
}
object ObjectBox {
lateinit var boxStore: BoxStore
private set
fun init(context: Context) {
if(!times) {
boxStore = MyObjectBox.builder()
.androidContext(context.applicationContext)
.build()
times = true
}
}
}
所以我将 ObjectBox 与一个名为 LibGDX 的库一起使用,这是一个用 java 编写的跨平台游戏库。它的工作原理是在单个 Android Activity class 中加载类似于 Java 小程序的内容,但所有工作都在小程序中完成,而 none 在Android(除了实例化 Activity)。
因此,我的 objectBox 代码在 Java 中,无法使用上下文。我因此运行
boxStore = MyObjectBox.builder().androidContext(this).build();
每次我在应用程序启动时创建数据库对象时,我都会运行使用以下代码。
private void createMyObjectBox() throws IOException {
FileHandle fileHandle = Gdx.files.local("objectstorefile");
if(!fileHandle.isDirectory()) {
fileHandle.mkdirs();
}
store = MyObjectBox.builder().directory(boxStoreDir).build();
}
我遇到了这个崩溃,如果我启动我的应用程序,然后立即按下主页按钮,然后再次启动它。我认为还有一个残留的 MyObjectBox 对象仍然存在,可能是由于 Android 和静态对象等的性质,没有被完全处理。
我不确定如何对此进行测试以避免错误。
在任何时候,每个目录都应该始终只有一个 MyObjectBox 实例处于活动状态。因此,您应该关闭旧存储 (store.close()
),或者保持存储打开(例如单例、静态等)。后者通常是首选,因为它更简单、更高效。
更新:非Android代码示例
static BoxStore store;
public static BoxStore getStore() {
if(store == null) store = createMyObjectBox();
return store;
}
你可以用这种方式
public class ObjectBox {
private static BoxStore boxStore;
public static void init(Context context) {
if (boxStore==null)
boxStore = MyObjectBox.builder().androidContext(context.getApplicationContext()).build();
}
public static BoxStore get() {
return boxStore;
}
在 Kotlin 中,您可以像这样制作“自制”单例。这应该可以解决您的问题:
companion object{
var times:Boolean = false
}
object ObjectBox {
lateinit var boxStore: BoxStore
private set
fun init(context: Context) {
if(!times) {
boxStore = MyObjectBox.builder()
.androidContext(context.applicationContext)
.build()
times = true
}
}
}