首页 > 解决方案 > 如何在 Android 上使用 MongoDB Morphia?

问题描述

我正在尝试在 Android 应用程序上使用morphia与 MongoDB 实例进行交互。

摇篮依赖: implementation 'org.mongodb.morphia:morphia:1.3.2'

实例化 Morphia 时 Morphia morphia = new Morphia();

我收到此错误:

E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: com.example.dibu2018.futbol, PID: 5085
                  java.lang.ExceptionInInitializerError
                      at java.lang.Class.classForName(Native Method)
                      at java.lang.Class.forName(Class.java:453)
                      at java.lang.Class.forName(Class.java:378)
                      at org.mongodb.morphia.mapping.lazy.LazyFeatureDependencies.testDependencyFullFilled(LazyFeatureDependencies.java:42)
                      at org.mongodb.morphia.mapping.lazy.LazyFeatureDependencies.createDefaultProxyFactory(LazyFeatureDependencies.java:57)
                      at org.mongodb.morphia.mapping.Mapper.<init>(Mapper.java:102)
                      at org.mongodb.morphia.Morphia.<init>(Morphia.java:47)
                      at com.example.dibu2018.futbol.storage.external.datahandlers.FutbolDbHelper.<init>(FutbolDbHelper.java:49)
                      at com.example.dibu2018.futbol.storage.external.datahandlers.FutbolDbHelper.getInstance(FutbolDbHelper.java:27)
                      at com.example.dibu2018.futbol.activities.GameDetailsActivity.onCreate(GameDetailsActivity.java:31)
                      ..........
                   Caused by: net.sf.cglib.core.CodeGenerationException: java.lang.reflect.InvocationTargetException-->null
                      at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:237)
                      at net.sf.cglib.core.KeyFactory$Generator.create(KeyFactory.java:144)
                      at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:116)
                      ...........
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) 
                   Caused by: java.lang.reflect.InvocationTargetException
                      at java.lang.reflect.Method.invoke(Native Method)
                      at net.sf.cglib.core.ReflectUtils.defineClass(ReflectUtils.java:384)
                      at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:219)
                      ............
                   Caused by: java.lang.UnsupportedOperationException: can't load this type of class file
                      at java.lang.ClassLoader.defineClass(ClassLoader.java:591)
                      at java.lang.reflect.Method.invoke(Native Method) 
                      ............

标签: androidmongodbmorphia

解决方案


根据这个 github 问题,Morphia 不是为在 Android 上运行而构建的。我假设我的错误是由于尝试

代理惰性引用

正如evachooly那个 github 问题上指出的那样。AndroidRuntime 抛出的确切错误行:

org.mongodb.morphia.mapping.lazy.LazyFeatureDependencies.testDependencyFullFilled(LazyFeatureDependencies.java:42)

推荐阅读